Zip and Unzip Files Programmatically in C#
There are many zip library which used to be popular. I will show you two of them.(7Zip and .NET ZipArchive)
7-Zip is a open source file archiver with a high compression ratio. Most of the source code is under the GNU LGPL license.
For more information:
http://www.7-zip.org/
You can use 7-zip library for zip and unzip to the files as follow:
//Firstly, you should set 7z.dll path.
SevenZipExtractor.SetLibraryPath(@"C:\7z.dll");
//Test Code:
string[] filePaths = new string[]
{
@"C:\Folder1\file1.jpg",
@"C:\Folder1\file2.txt",
@"C:\Folder1\file1.png",
};
ZipFiles(filePaths, @"C:\zippedFile2.zip");
ZipFolder(@"C:\Folder1", @"C:\zippedFile1.zip", "password");
Unzip(@"C:\zippedFile1.zip", @"C:\Folder2", "password");
Sample methods(using 7-Zip):
public void ZipFiles(string[] filePaths, string outputFilePath, string password = null)
{
var tmp = new SevenZipCompressor();
tmp.ScanOnlyWritable = true;
tmp.CompressFilesEncrypted(outputFilePath, password, filePaths);
}
public void ZipFolder(string folderPath, string outputFilePath, string password = null)
{
var tmp = new SevenZipCompressor();
tmp.ScanOnlyWritable = true;
tmp.CompressDirectory(folderPath, outputFilePath, password);
}
public void Unzip(string zippedFilePath, string outputFolderPath, string password = null)
{
SevenZipExtractor tmp = null;
if (!string.IsNullOrEmpty(password))
tmp = new SevenZipExtractor(zippedFilePath, password);
else
tmp = new SevenZipExtractor(zippedFilePath);
tmp.ExtractArchive(outputFolderPath);
}
In .NET framework 4.5, System.IO.Compression namespace get some new classes that allow you to work with zip files programmatically.
Sample code:
//Zip files
ZipArchive zip = ZipFile.Open(filePath, ZipArchiveMode.Create);
foreach (string file in filePaths)
{
zip.CreateEntryFromFile(file, Path.GetFileName(file), CompressionLevel.Optimal);
}
zip.Dispose();
//Unzip
ZipFile.CreateFromDirectory(folderPath, zippedFilePath);
ZipFile.ExtractToDirectory(zippedFilePath, outputFolderPath);