• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

SLIFE

Copiar diversos ficheiros

21 mensagens neste tópico

Boas a todos

Sou novo na comunidade!

Estive a ler diversos topicos, e não consegui resolver o meu problema.

Estou a partir a cabeça, com uma situação que poderá ser bastante simples, o problema é que já estou farto de tentar e quanto mais mexo, mais baralhado fico.

O meu problema é o seguinte:

Tenho uma aplicação em VB 2008, onde tudo está a funcionar correctamente á já alguns meses! (Tirando uns possiveis bugs) Mas funciona!

Mas agora tive que efectuar alterações numa parte do codigo devido a ter existido uma incrementação de ficheiros!

É assim, antigamente tinha uma pasta, na qual tinha por exemplo 10 ficheiros, e eu precisava copiar os mesmos para outro local, com outro nome.

Até aqui tudo bem, criei o codigo de copiar directo sem stress!

Agora os ficheiros que tenho que copiar foram alterados e incrementados, por isso nunca vou saber ao certo quantos são!

O que eu precisava de fazer era ler para uma string os ficheiros que existiam na pasta, e depois copiar os mesmos para outra, alterando o nome, e sem ter que o fazer um a um!

Exemplo do que tenho agora:

For Each arquivo As String In Directory.GetFiles(Txtcaminhoorigem.Text, txtde.Text & "*.*") ' a txtde faz uma procura dos ficheiros
ListBox3.Items.Add(arquivo) 'Coloca todos os ficheiros existentes na pasta
Next

Com isto consigo saber todos os ficheiros existentes na pasta, mas nao os consigo copiar! Desta maneira:

My.Computer.FileSystem.CopyFile(arquivo, txtcaminhodestino.Text & "\" & txtpara.Text & "*.*")

Diz que estou a usar caracteres inválidos.

Só me deixa fazer se for deste genero:

My.Computer.FileSystem.CopyFile(Txtcaminhoorigem.Text & "\nomeficheiro.txt", txtcaminhodestino.Text & "\nomeficheiro.txt")

Como posso copiar todos os ficheiros existente numa pasta, e trocar-lhe o nome, sem saber quantos e quais ficheiros estão lá dentro??

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
My.Computer.FileSystem.CopyFile(arquivo, txtcaminhodestino.Text & "\" & txtpara.Text & "*.*")

Eu não sei VB, mas queres copiar o "arquivo" para, por exemplo

"destino\para.txt*.*"

Aquele "*.*" não estará a mais?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não sei VB, mas queres copiar o "arquivo" para, por exemplo

"destino\para.txt*.*"

Aquele "*.*" não estará a mais?

Boas

O txtpara é uma text que tenho onde escrevo o nome do ficheiro que quero que grave.

Isto é, se o ficheiro se chamar por exemplo:

familia.txt

e eu escrever na txtpara: minha

queria que ele gravasse o ficheiro de destino com o nome de minhafamilia.txt

Deu para perceber?

O que quero fazer é algo do genero que se fazia em DOS:

XCOPY c:\*.*  c:\123*.*

E quando se fazia isto todos os ficheiros copiados ficavam a chamar-se 123nome.txt

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Para mudares o nome do ficheiro tens de o fazer um a um.

Exemplo:

        For Each arquivo As String In IO.Directory.GetFiles("c:\test\", "*.*")

            ' Verifica qual a localização e nome do ficheiro
            Dim fi As New IO.FileInfo(arquivo)

            ' Copia o ficheiro para a mesma directoria com um novo nome
            IO.File.Copy(arquivo, fi.DirectoryName & "\NOVOTEXTO" & fi.Name)

        Next

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao podes usar wildcards(*.*) no VB, para ele é tudo nome de ficheiro, é tudo tinto, ele nao faz a distinção, a melhor solução é mesmo um for each.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Para mudares o nome do ficheiro tens de o fazer um a um.

Exemplo:

        For Each arquivo As String In IO.Directory.GetFiles("c:\test\", "*.*")

            ' Verifica qual a localização e nome do ficheiro
            Dim fi As New IO.FileInfo(arquivo)

            ' Copia o ficheiro para a mesma directoria com um novo nome
            IO.File.Copy(arquivo, fi.DirectoryName & "\NOVOTEXTO" & fi.Name)

        Next

Boas

Funciona como dizes!

Mas agora surgiu-me outro problema!

E que quando faço o copiar dos ficheiros e colocos noutra pasta, precisava que ele alterasse o nome do ficheiro!

Já esta a alterar, mas neste caso adiciona o texto que eu quero no inicio do ficheiro!

Mas percebi agora que preciso de remover do nome, os tres primeiros digitos!

Será possivel fazer isso com a instrução que me deste??

Obrigado Pela ajuda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao podes usar wildcards(*.*) no VB, para ele é tudo nome de ficheiro, é tudo tinto, ele nao faz a distinção, a melhor solução é mesmo um for each.

Boas

Pois isso de nao poder usar o (*.*) nao sabia!

Mas com o exemplo que o colega me deu em cima esta a funcionar!

Apenas preciso agora de eliminar no nome original do ficheiro, os tres primeiros digitos!

Será Possivel?

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não entendi muito bem, mas vê se é isto:

        For Each arquivo As String In IO.Directory.GetFiles("c:\test\", "*.*")

            ' Verifica qual a localização e nome do ficheiro
            Dim fi As New IO.FileInfo(arquivo)

            ' Verifica se o nome tem um tamanho superior a 3
            If (fi.Name.Length - fi.Extension.ToString.Length) > 3 Then
                ' Copia o ficheiro para a mesma directoria com um novo nome
                IO.File.Copy(arquivo, fi.DirectoryName & "\NOVOTEXTO" & fi.Name.Substring(3), True)
            Else
                MessageBox.Show("O ficheiro " & fi.Name & " não pode ser copiado")
            End If

        Next

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não entendi muito bem, mas vê se é isto:

        For Each arquivo As String In IO.Directory.GetFiles("c:\test\", "*.*")

            ' Verifica qual a localização e nome do ficheiro
            Dim fi As New IO.FileInfo(arquivo)

            ' Verifica se o nome tem um tamanho superior a 3
            If (fi.Name.Length - fi.Extension.ToString.Length) > 3 Then
                ' Copia o ficheiro para a mesma directoria com um novo nome
                IO.File.Copy(arquivo, fi.DirectoryName & "\NOVOTEXTO" & fi.Name.Substring(3), True)
            Else
                MessageBox.Show("O ficheiro " & fi.Name & " não pode ser copiado")
            End If

        Next

Boas

Resultou e está resolvido!

Muito Obrigado pela ajuda jpaulino.

Sou novo aqui, mas parece que finalmente encontrei um sitio onde posso aprender e tirar as minhas duvidas!

Por esse motivo, Obrigado mais uma vez!

E ainda bem que existe fóruns como o portugal-a-programar e moderadores como tu jpaulino, que estão disponíveis para ajudar quem quer aprender.

Um abraço

SLIFE

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas

Pois isso de nao poder usar o (*.*) nao sabia!

Mas com o exemplo que o colega me deu em cima esta a funcionar!

Apenas preciso agora de eliminar no nome original do ficheiro, os tres primeiros digitos!

Será Possivel?

Obrigado

Sim com sub-string, se nao estou errado, left, right ou middle. Mas alguem poderá ilucidar-te melhor sobre isso ou até mesmo o www.google.pt

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aproveitando o tópico existente tentei resolver o meu problema, pois estou a tentar todos os ficheiros de uma determina pasta com o format jpg para uma outra que é seleccionada com uma dialogbox.

O código é o seguinte:

For Each arquivo As String In IO.Directory.GetFiles(Application.StartupPath & "\pics\", "*.jpg")

                Dim fi As New IO.FileInfo(arquivo)

                IO.File.Copy(arquivo, theFolderBrowser.SelectedPath & fi.Name.ToString, True)


            Next

Não está a copiar nenhum ficheiro. Tenho alguma coisa errada?

Obrigado pela ajuda.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Carrega num botao em baixo que diz topic solved

Desculpem a minha ignorância mas não estou a localizar esse butão.

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Lá em baixo, no mesmo contexto dos restantes, com o texto "Topic Solved".

Marco-o por ti agora.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:D O SLIFE, que arrancou o tópico, ficou com o problema resolvido, marcou inclusive o tópico como resolvido de forma errada, com um tag, e fui levado por isso.

My bad :). Deixa no mínimo tentar resolver o problema do Sniper PT

O código é o seguinte:

For Each arquivo As String In IO.Directory.GetFiles(Application.StartupPath & "\pics\", "*.jpg")

                Dim fi As New IO.FileInfo(arquivo)

                IO.File.Copy(arquivo, theFolderBrowser.SelectedPath & fi.Name.ToString, True)


            Next

Não está a copiar nenhum ficheiro. Tenho alguma coisa errada?

Obrigado pela ajuda.

Exprimenta um debug.print ou mesmo uma MsgBox para veres a concatenação em:

theFolderBrowser.SelectedPath & fi.Name.ToString

Entre o selectedpath e o fi.name, está a faltar uma "\" de certeza.

Debug.Print(theFolderBrowser.SelectedPath & fi.Name.ToString)
'ou
MsgBox(theFolderBrowser.SelectedPath & fi.Name.ToString)
'correcto
theFolderBrowser.SelectedPath & "\" & fi.Name.ToString

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:D O SLIFE, que arrancou o tópico, ficou com o problema resolvido, marcou inclusive o tópico como resolvido de forma errada, com um tag, e fui levado por isso.

My bad :).

É mais um dos problemas que acontesse por aproveitarem tópicos antigos para novas questões ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Resolvido, efectivamente faltava um "\".

Muito obrigado pela ajuda.

Para a próxima inicia um novo tópico para não causar confusão :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Certíssimo, aliás só recomecei este tópico por estar enquadrado e a moderação por vezes preferir que não se criem muitos tópicos. Mais uma vez obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora