VB.NET - Copiando arquivos entre diretórios


Para copiar arquivos entre diretórios podemos usar o namespace System.IO , ele contém tipos que permitem a leitura e escrita síncrona e assíncrona em arquivos e streams de dados. As classes que vamos usar neste exemplo são :

Classes Descrição
Directory Expõe métodos estáticos para criar,mover e enumerar entre diretório e subdiretórios.
DirectoryInfo Expõe métodos de instância para criar,mover e enumerar entre diretório e subdiretórios.
DirectoryNotFoundException Uma exceção que será lançada quando um arquivo ou diretório não for localizado.
File Fornece métodos estáticos para criar,copiar, excluir, mover e abrir arquivos .
FileInfo Fornece métodos de instância para para criar,copiar, excluir, mover e abrir arquivos .
  1. Inicie um novo projeto  no VS.NET e do tipo Windows Application com o nome de CopiaArquivos 
  2. No formulário padrão - form1.vb - insira dois controles Label , dois controles TextBox , dois controles Buttons e um controle OpenFileDialog
  3. A seguir inclua o código abaixo no formulário.
- O botão - Inicia copia - invoca a rotina : copiarDiretorio passando os argumentos informados nas caixas de texto

- O botão - Ver Pasta - abre a janela de diálogo OpenFileDialog para verificar o conteúdo da pasta de destino.

No código temos a rotina - copiarDiretório(fonte, destino,sobrepor) que é usada para fazer o serviço. Você deve passar como argumentos o caminho e nome da pasta de origem e o nome da pasta de destino. O argumento para sobrescrever ou não os arquivos da pasta de destino é opcional. O namespace System.IO deve ser referenciado com cláusula Imports.

Imports System.IO

 

Public Class Form1

Inherits System.Windows.Forms.Form

 

Sub copiarDiretorio(ByVal CaminhoFonte As String, ByVal CaminhoDestino As String, Optional ByVal Sobrepor As Boolean = False)

 

Dim DiretorioFonte As DirectoryInfo = New DirectoryInfo(CaminhoFonte)

Dim DiretorioDestino As DirectoryInfo = New DirectoryInfo(CaminhoDestino)

 

If DiretorioFonte.Exists Then

   If Not DiretorioDestino.Parent.Exists Then

        Throw New DirectoryNotFoundException(" O diretório de destino não existe : " + DiretorioDestino.FullName)

   End If

 

   If Not DiretorioDestino.Exists Then

        MsgBox("O diretorio destino não existe , vou criá-lo", MsgBoxStyle.Critical, "Copia")

        DiretorioDestino.Create()

    End If

 

    'copia todos os arquivos do diretório

    Dim arquivos As FileInfo

 

    For Each arquivos In DiretorioFonte.GetFiles()

        If Sobrepor Then

            arquivos.CopyTo(Path.Combine(DiretorioDestino.FullName, arquivos.Name), True)

        Else

            If Not File.Exists(Path.Combine(DiretorioDestino.FullName, arquivos.Name)) Then

               arquivos.CopyTo(Path.Combine(DiretorioDestino.FullName, arquivos.Name), False)

            End If

        End If

    Next

 

   'copia todos os subdiretorios usando recursao

   Dim subdir As DirectoryInfo

 

   For Each subdir In DiretorioFonte.GetDirectories()

         copiarDiretorio(subdir.FullName, Path.Combine(DiretorioDestino.FullName, subdir.Name), Sobrepor)

   Next

Else

    Throw New DirectoryNotFoundException("Diretório origem não existe " + DiretorioFonte.FullName)

End If

End Sub


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    copiarDiretorio(TextBox1.Text, TextBox2.Text)

End Sub


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

  OpenFileDialog1.InitialDirectory = "c:\destino"

  OpenFileDialog1.Filter = "txt files (*.txt)|*.txt|Todos (*.*)|*.*"

  openFileDialog1.FilterIndex = 2

  openFileDialog1.RestoreDirectory = True

  openFileDialog1.ShowDialog()

End Sub

 

End Class

 

O código para abrir a janela de diálogo foi colocado no evento Click do botão - Ver Pasta. Após executar o código e visualizar a pasta teremos:

 

 - Se o diretório de destino não existir ele será criado.

- No exemplo eu estou copiando todos os arquivos da pasta c:\origem para pasta c:\destino

Você pode copiar arquivos e subdiretórios dentro do diretório de origem.

Até a próxima dica VB .NET

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti