Neste artigo vou mostrar como usar os recursos do namespace System.IO e deletar arquivos duplicados em uma pasta usando a linguagem C#. |
FileSystemInfo - A classe base que representa qualquer objeto
do sistema de arquivos. FileInfo e File - Essas classes representam um arquivo no sistema de arquivos. DirectoryInfo e Directory - Essas classes representam uma pasta no sistema de arquivos. Path - Essa classe contém membros estáticos que você pode usar para manipular nomes de caminhos. DriveInfo - Essa classe fornece propriedades e métodos que fornecem informações sobre um drive. |
Quando temos que trabalhar com vários arquivos, podemos usar a classe Directory que define o método GetFiles que retorna um array de strings de todos os arquivos no diretório, e, o método GetDirectories que retorna um array de strings de todos os diretórios.
Todos esses métodos definem sobrecargas que permitem passar um padrão de pesquisa e um valor de enumeração SearchOption que permite percorrer todos os subdiretórios ou permanecer no nível superior do diretório usando o valor AllDirectories ou TopDirectoriesOnly.
O padrão de pesquisa não permite a passagem de expressões regulares permitindo apenas expressões simples usando * para qualquer caractere e ? para caracteres únicos.
Quando você percorre um diretório enorme (ou subdiretórios), os métodos GetFiles e GetDirectories precisam ter o resultado completo antes que o resultado seja retornado. Uma alternativa é usar os métodos EnumerateDirectories e EnumerateFiles. Esses métodos oferecem os mesmos parâmetros para o padrão de pesquisa e opções, mas eles imediatamente começam a retornar um resultado com IEnumerable<string>.
Neste artigo vou mostrar um exemplo onde devemos criar uma programa para deletar arquivos duplicados em um diretório. Estamos considerando arquivos duplicados os arquivos que foram copiados para a mesma pasta e que terminam em - Copia. Veja a figura abaixo:
Para fazer isso teremos que percorrer um diretório e seu subdiretórios e deletar arquivos que estão duplicados.
Recursos Usados
Criando o projeto Windows Forms
Abra o VS 2017 Community e crie um novo projeto (File-> New Project) usando a linguagem C# e o template Windows Forms App (.NET Framework).
Informe um nome a seu gosto. Eu vou usar o nome CShp_Arquivos;
No formulário Form1 do projeto inclua os seguintes controles a partir da ToolBox:
Disponha os controles conforme o leiaute da figura abaixo:
A seguir inclua no formulário os seguintes namespaces:
using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
No evento Click do botão para selecionar o diretório inclua o código
abra a janela de diálogo FolderBrowserDialog :
No botão para Exibir Arquivos inclua no evento Click o código abaixo:
Agora no evento Click do botão Verificar Arquivos Duplicados temos o código que vai deletar ou apenas exibir os arquivos duplicados:
Conforme o valor marcado no checkbox - Deletar arquivos duplicados no diretorio , passamos o parâmetro true ou false para deletar ou apenas exibir.
Finamente temos o método DeletarArquivosDuplicados() que recebe o diretório e um valor booleano true ou false para deletar ou não os arquivos:
O método DeletarArquivosDuplicados percorre todos os arquivos no diretório que é passado com o primeiro argumento, percorrendo todos os subdiretórios usando a opção SearchOption.AllDirectories.
Usando a instrução foreach, o arquivo atual da iteração é comparado ao arquivo da iteração anterior. Se o nome do arquivo for o mesmo e somente o prefixo - Copia for diferente, e se o tamanho dos arquivos for igual , o arquivo copiado será excluído, invocando a instrução FileInfo.Delete.
Executando o projeto e iremos obter:
Na próxima parte do artigo veremos uma abordagem mais robusta para esse problema.
Pegue o projeto completo aqui : CShp_Arquivos.zip
"Como está escrito : Não há um justo, nem um sequer."
Romanos 3:10
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 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
VB .NET - O Calculando o CheckSum para um arquivo - Macoratti
VB.NET - Criar, Ler, Escrever, Copiar e Deletar arquivos ... - Macoratti
C# - Lendo e escrevendo em arquivos textos e binários - Macoratti
.NET - Trabalhando com propriedades e atributos de arquivos e ...