none
Como pegar apenas os caminho de um arquivo ?

    Question

  • Preciso renomear um arquivo conforme o seu nome... Então pensei em "Contains" mas ainda não arranjei uma solução...

     

    O arquivo vira com um nome e um numero e listarei todos os da mesma extensão "Xls"... Então preciso renomear como por exemplo: "arquivo2545x" para "2545"...

     

    Urgente, grato.


    Tec. Virtual - Micro Computadores. Grandes Idéias!
    Saturday, February 05, 2011 10:55 PM

Answers

  • boas, fica uma ideia:

    Public Sub readFiles()
            Dim Nome As String = "", novoNome As String = "", actualNome As String = "", extensao As String = "", caminho As String = "C:\\Documents and Settings\\Luis\\Desktop\\WindowsApplication1\\WindowsApplication1\\files"
            Dim di As New IO.DirectoryInfo(caminho)
            Dim aryFi As IO.FileInfo() = di.GetFiles("*.xls")


            For Each fi As FileInfo In aryFi
                extensao = fi.Extension
                Nome = "\" & fi.Name.ToString()
                actualNome = fi.Name.ToString().Substring(0, fi.Name.ToString().IndexOf("."))
                novoNome = "\" & alteraNomeFile(actualNome) & extensao
                Rename(caminho & Nome, caminho & novoNome)
            Next

        End Sub

     

     Public Function alteraNomeFile(ByVal name As String) As String

            Dim sb As New StringBuilder

            Dim i As Integer

            If String.IsNullOrEmpty(name) Then
                Return String.Empty
            End If

            For i = 0 To name.Length - 1
                If (IsNumeric(name(i))) Then
                    sb.Append(name(i))
                End If
            Next i

            Return (sb.ToString())

        End Function

     

     

    colocar nos usings:

    Imports System.IO
    Imports System.Text


    espero ter ajudado.
    • Marked as answer by Tec. Virtual Sunday, February 06, 2011 2:37 PM
    Sunday, February 06, 2011 1:27 AM
  • Olá

    Acredito que a forma mais eficaz de trabalhar com isso será com expressão regular, fiz um exemplo segundo as possibilidades que você passou acima, ou seja, se o nome de arquivo é formado por:
    [letras, nenhuma, uma ou mais vezes]+[números uma vez ou mais]+[letras nenhuma, uma ou mais vezes]

    Então, para encontrar apenas o número no meio disso, vai funcionar assim:

    Imports System.Text.RegularExpressions

            Dim nomeArquivo As String = "arquivo1234teste"
            Dim res = Regex.Match(nomeArquivo, "^[a-zA-Z]*(?<numero>\d+)[a-zA-Z]*.*$")
            If res.Success Then
                MsgBox(res.Result("${numero}"))
            End If

    Att.


    Lucas
    • Edited by devLucas Sunday, February 06, 2011 1:01 PM *com extensão do arquivo
    • Marked as answer by Tec. Virtual Sunday, February 06, 2011 2:37 PM
    Sunday, February 06, 2011 12:59 PM
  • boas, mas esse codigo deixa apenas o numero. por exemplo:

     

    nomeActual=arquivo001.xls -> passa a ser 001.xls


    espero ter ajudado.
    • Marked as answer by Tec. Virtual Sunday, February 06, 2011 2:37 PM
    Sunday, February 06, 2011 2:13 PM

All replies

  • boas, explica melhor, tem sempre nome e numero? e o nome é sempre arquivo e depois o numero? tipo

    arquivo0001, arquivo002, arquivo003 e assim continua?


    espero ter ajudado.
    Saturday, February 05, 2011 11:45 PM
  • Não... A unica coisa que sei sobre os arquivos é que terão qualquer texto e o numero... Possa ser q o texto venha depois ou antes do numero...

     

    Dessa forma os arquivos podem ser "Arqui8879vo", "8974arquivo", "ar4785q", "4568a"................... Podem ter enorme numero de mudanças na formação dos nomes...

     

    Grato...


    Tec. Virtual - Micro Computadores. Grandes Idéias!
    Sunday, February 06, 2011 12:14 AM
  • boas, fica uma ideia:

    Public Sub readFiles()
            Dim Nome As String = "", novoNome As String = "", actualNome As String = "", extensao As String = "", caminho As String = "C:\\Documents and Settings\\Luis\\Desktop\\WindowsApplication1\\WindowsApplication1\\files"
            Dim di As New IO.DirectoryInfo(caminho)
            Dim aryFi As IO.FileInfo() = di.GetFiles("*.xls")


            For Each fi As FileInfo In aryFi
                extensao = fi.Extension
                Nome = "\" & fi.Name.ToString()
                actualNome = fi.Name.ToString().Substring(0, fi.Name.ToString().IndexOf("."))
                novoNome = "\" & alteraNomeFile(actualNome) & extensao
                Rename(caminho & Nome, caminho & novoNome)
            Next

        End Sub

     

     Public Function alteraNomeFile(ByVal name As String) As String

            Dim sb As New StringBuilder

            Dim i As Integer

            If String.IsNullOrEmpty(name) Then
                Return String.Empty
            End If

            For i = 0 To name.Length - 1
                If (IsNumeric(name(i))) Then
                    sb.Append(name(i))
                End If
            Next i

            Return (sb.ToString())

        End Function

     

     

    colocar nos usings:

    Imports System.IO
    Imports System.Text


    espero ter ajudado.
    • Marked as answer by Tec. Virtual Sunday, February 06, 2011 2:37 PM
    Sunday, February 06, 2011 1:27 AM
  • Caro Luis, agradeço sua dedicação, mas ainda não consegui...

    O que preciso é que ele veja o numero que está no arquivo e deixa apenas ele... Os numeros não são sequenciais... Teria como você me ajudar em mais esse trabalho ??

     

    Grato.


    Tec. Virtual - Micro Computadores. Grandes Idéias!
    Sunday, February 06, 2011 1:42 AM
  • Olá

    Acredito que a forma mais eficaz de trabalhar com isso será com expressão regular, fiz um exemplo segundo as possibilidades que você passou acima, ou seja, se o nome de arquivo é formado por:
    [letras, nenhuma, uma ou mais vezes]+[números uma vez ou mais]+[letras nenhuma, uma ou mais vezes]

    Então, para encontrar apenas o número no meio disso, vai funcionar assim:

    Imports System.Text.RegularExpressions

            Dim nomeArquivo As String = "arquivo1234teste"
            Dim res = Regex.Match(nomeArquivo, "^[a-zA-Z]*(?<numero>\d+)[a-zA-Z]*.*$")
            If res.Success Then
                MsgBox(res.Result("${numero}"))
            End If

    Att.


    Lucas
    • Edited by devLucas Sunday, February 06, 2011 1:01 PM *com extensão do arquivo
    • Marked as answer by Tec. Virtual Sunday, February 06, 2011 2:37 PM
    Sunday, February 06, 2011 12:59 PM
  • boas, mas esse codigo deixa apenas o numero. por exemplo:

     

    nomeActual=arquivo001.xls -> passa a ser 001.xls


    espero ter ajudado.
    • Marked as answer by Tec. Virtual Sunday, February 06, 2011 2:37 PM
    Sunday, February 06, 2011 2:13 PM