C# - Copiando e movendo e deletando arquivos


Hoje vou mostrar como podemos copiar, mover e deletar arquivos de maneira síncrona usando as classes System.IO.File, System.IO.Directory, System.IO.FileInfo e System.IO.DirectoryInfo do namespace System.IO.

Vamos criar um pequeno projeto Windows Forms que permitirá selecionar arquivos e pastas e realizar operações com arquivos.

recursos usados:

Criando o projeto no VS 2019 Community

Vamos criar um projeto usando a linguagem C# do tipo Windows Forms para .NET Framework :

Podemos chamar o projeto de WF_TrataArquivos.

No formulário padrão form1.cs vamos criar uma interface bem simples e intuitiva usando os seguintes controles:

Conforme o leiaute da figura abaixo:

Os namespaces usados no projeto são:

using System;
using System.Windows.Forms;
using System.IO;

Ao lad do primeiro TextBox temos um botão para selecionar o arquivo a ser copiado ou movido.

No evento Click deste botão - btnSelecionaArquivo -  temos o código abaixo:

      private void BtnSelecionaArquivo_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd1 = new OpenFileDialog();
            //define as propriedades do controle OpenFileDialog
            ofd1.Multiselect = false;
            ofd1.Title = "Selecionar Arquivo";
            ofd1.InitialDirectory = @"C:\dados\txt";
            //filtra para exibir todos os arquivos
            ofd1.Filter = "All files (*.*)|*.*";
            ofd1.CheckFileExists = true;
            ofd1.CheckPathExists = true;
            ofd1.FilterIndex = 1;
            ofd1.RestoreDirectory = true;
            ofd1.ReadOnlyChecked = true;
            ofd1.ShowReadOnly = true;
            DialogResult dr = ofd1.ShowDialog();
            if (dr == DialogResult.OK)
            {
                //atribui o nome do arquivo ao arquivo texto
                txtArquivo.Text = ofd1.FileName;
            }
        }

Este código abre uma janela de diálogo - OpenFileDialog - e permite ao usuário selecionar um arquivo.

No segundo TextBox temos um botão que permite selecionar o diretório de destino.

No evento Click deste botão - BtnSelecionaDiretorio - temos o código abaixo:

       private void BtnSelecionaDiretorio_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fbd1 = new FolderBrowserDialog();
            fbd1.Description = "Selecione o diretório de destino";
            //define pasta inicial
            fbd1.RootFolder = Environment.SpecialFolder.MyComputer;
            fbd1.ShowNewFolderButton = true;
            if (fbd1.ShowDialog() == DialogResult.OK)
            {
                // Exibe a pasta selecionada
                txtDiretorio.Text = fbd1.SelectedPath;
            }
        }

Este código abre uma janela de diálogo - FolderBrowserDialog - e permite ao usuário selecionar um diretório.

A seguir temos dois radiobuttons - rdbCopiar e rdbMover - que permite selecionar a operação desejada

No evento botão Click do botão - Realizar Operação - temos o código a seguir:

 private void btnRealizarOperacao_Click(object sender, EventArgs e)
 {
    if (!string.IsNullOrEmpty(txtArquivo.Text) && !string.IsNullOrEmpty(txtDiretorio.Text))
     {
         try
         {
             string origem = txtArquivo.Text;
             string arquivo = Path.GetFileName(origem);
             string destino = Path.Combine(txtDiretorio.Text, arquivo);
                if (rdbCopiar.Checked)
                {
                      //copia o arquivo e sobrescreve se ja existir
                      File.Copy(origem, destino, true);
                      MessageBox.Show($"Arquivo {origem} Copiado com sucesso \npara {destino}");
                 }
                 else if(rdbMover.Checked)
                  {
                     if(File.Exists(destino))
                     {
                        if (MessageBox.Show("O arquivo já existe. Deseja deletar o arquivo e continuar ?", "Confirma",
 MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
                        {
                           try
                           {
                                File.Delete(destino);
                           }
                           catch (IOException ex)
                           {
                                    Console.WriteLine(ex.Message);
                                    return;
                                }
                            }
                            else
                            {
                                return;
                            }
                        }
                        File.Move(origem, destino);
                        MessageBox.Show($"Arquivo {origem} Movido com sucesso \npara {destino}");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro : " + ex.Message);
                }
            }
            else
            {
                MessageBox.Show("Selecione um arquivo e um diretório de destino");
            }
        }

Neste código estamos realizando as seguintes operações:

Executando o projeto teremos o resultado a seguir:

Os conceitos aqui mostrados devem ser conhecidos por todo o desenvolvedor C# da mesma forma que conhecemos de cor a tabuada do 10.

Pegue o projeto completo aqui: CShp_TrataArquivos.zip

"Quem ama a sua vida perdê-la-á, e quem neste mundo odeia a sua vida, guardá-la-á para a vida eterna.
Se alguém me serve, siga-me, e onde eu estiver, ali estará também o meu servo. E, se alguém me servir, meu Pai o honrará."
João 12:25,26

Referências:


José Carlos Macoratti