Jump to content
SLIFE

Copiar diversos ficheiros

Recommended Posts

SLIFE

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


Sandro Coelho

Share this post


Link to post
Share on other sites
pmg
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?


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
SLIFE

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


Sandro Coelho

Share this post


Link to post
Share on other sites
jpaulino

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

Share this post


Link to post
Share on other sites
SLIFE

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


Sandro Coelho

Share this post


Link to post
Share on other sites
SLIFE

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


Sandro Coelho

Share this post


Link to post
Share on other sites
jpaulino

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

Share this post


Link to post
Share on other sites
SLIFE

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


Sandro Coelho

Share this post


Link to post
Share on other sites
psiico

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

Share this post


Link to post
Share on other sites
Sniper PT

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.

Share this post


Link to post
Share on other sites
Sniper PT

Carrega num botao em baixo que diz topic solved

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

Obrigado.

Share this post


Link to post
Share on other sites
ribeiro55

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

Marco-o por ti agora.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
ribeiro55

: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


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
jpaulino

: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 ;)

Share this post


Link to post
Share on other sites
jpaulino

Resolvido, efectivamente faltava um "\".

Muito obrigado pela ajuda.

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

Share this post


Link to post
Share on other sites
Sniper PT

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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.