Introdução
No artigo de hoje vou mostrar como fazer o 7zip se tornar seu “amigo” na hora de criptografar e descriptografar arquivos com ou sem senhas dentro de uma aplicação .NET, de maneira bastante rápida e descomplicada.
Aplicação
Primeiramente vamos criar uma aplicação Console Application (File > New > Project), conforme na figura 1, abaixo:
Feito isso, vamos criar três pastas no nosso projeto com os nomes 7zip (que vai conter o executável do 7zip), ToZip (que vai conter os arquivos a serem compactados) e ToUnzip (com os arquivos a serem descompactados), conforme a figura abaixo:
Agora chega de configuração e vamos para a melhor parte do artigo: show me the code! (Código comentado para melhor entendimento).
class Program { private static void ZipFile(string file, string outPath) { //Classe utilizada para se iniciar um processo no windows. ProcessStartInfo process = new ProcessStartInfo(); //Define qual aplicação será executado. process.FileName = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\..\7zip\7z.exe")); //Define os argumentos que serão utilizados pela aplicação definida no FileName, no caso abaixo o "a" define que será uma compactação e o "-p" a senha que será necessária para descompactar futuramente. process.Arguments = quot;a \"{Path.GetFileNameWithoutExtension(file)}\" \"{file}\" \"-piMasters\""; //Define o diretório de trabalho. process.WorkingDirectory = outPath; //Define se o shell do sistema deve ser executado. process.UseShellExecute = false; //Define se o processo deve ser executado em uma nova janela. process.CreateNoWindow = true; //Inicia-se o processo. var zipFile = Process.Start(process); //Aguarda o encerramento do processo iniciado. zipFile.WaitForExit(); //Apaga o arquivo que acabou de ser zipado. File.Delete(file); } private static void UnzipFile(string file, string outPath) { //Classe utilizada para se iniciar um processo no windows. ProcessStartInfo process = new ProcessStartInfo(); //Define qual aplicação será executado. process.FileName = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\..\7zip\7z.exe")); //Define os argumentos que serão utilizados pela aplicação definida no FileName, no caso abaixo o "x" define que será uma descompactação e o "-p" a senha para que isso seja possível". process.Arguments = quot;x \"{file}\" \"-piMasters\""; //Define o diretório de trabalho. process.WorkingDirectory = outPath; // Define se o shell do sistema deve ser executado. process.UseShellExecute = false; //Define se o processo deve ser executado em uma nova janela. process.CreateNoWindow = true; //Inicia-se o processo. var unzipFile = Process.Start(process); //Aguarda o encerramento do processo iniciado. unzipFile.WaitForExit(); //Apaga o arquivo que acabou de ser zipado. File.Delete(file); } static void Main(string[] args) { //Localiza-se a pasta para descompactar os arquivos .7z. var pathToUnzip = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\..\ToUnzip")); //Localiza-se a pasta para compactar seus arquivos. var pathToZip = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\..\ToZip")); //Array com todos os arquivos que seram compactados. var fileNameToZip = Directory.GetFiles(pathToZip); foreach (var file in fileNameToZip) { ZipFile(file, pathToUnzip); } //Array com todos os arquivos que seram descompactados. var fileNameToUnzip = Directory.GetFiles(pathToUnzip); foreach (var file in fileNameToUnzip) { UnzipFile(file, pathToZip); } } }
Agora vamos para o último passo da nossa aplicação, que é colocar o executável do 7zip na nossa aplicação.
7zip
Primeiramente, caso você não tenha o 7zip instalado. baixe-o através do link https://www.7-zip.org/download.html e após finalizar a instalação, abra a pasta onde ele foi instalado (provavelmente em C:\Program Files\7-Zip) e em seguida copie o arquivo 7z.exe e cole dentro da pasta 7zip do nosso projeto.
Feito isso, vamos rodar o projeto e você poderá observar que todos os arquivos que você colocar na pasta ToZip serão compactados, e em seguida, jogados para a pasta ToUnzip, que por sua vez serão descompactados e jogados novamente na pasta ToZip.
Caso queiram baixar a aplicação, ela estará disponível no meu GitHub através do link:
Espero que tenham gostado do artigo e até a próxima!
Obrigado.