압축 파일 형식용 C# .NET 라이브러리
ZIP, GZIP, TAR 및 BZIP2와 같은 파일 아카이버 형식을 위한 오픈 소스 무료 .NET API
SharpZipLib 시작하기
SharpZipLib를 구성하려면 .NET Framework 4.5 이상이 필요합니다. 전제 조건을 충족하면 GitHub에서 리포지토리를 수동으로 다운로드하거나 NuGet에서 어셈블리를 직접 가져올 수 있습니다.
SharpZipLib를 설치하는 권장 방법은 NuGet 패키지로 제공되는 NuGet에서 제공하는 것입니다.
NuGet에서 SharpZipLib 설치
Install-Package SharpZipLib
NET 라이브러리를 사용하여 ZIP 파일 생성 및 추출
SharpZipLib를 사용하면 소프트웨어 개발자가 자신의 .NET 응용 프로그램 내에서 ZIP 파일을 만들 수 있습니다. 개발자는 디렉토리 내에서 사용 가능한 모든 파일을 쉽게 압축하고 단일 zip 파일에 할당할 수 있습니다. ZIP은 가장 널리 사용되는 압축 파일 형식 중 하나이며 사용자에게 파일 크기를 줄일 수 있는 기능을 제공합니다. API는 또한 ZIP 파일의 내용을 사용자가 선택한 위치로 추출하는 것을 지원합니다.
ZIP에서 파일 추출 - C#
// Open zip file
using (Stream fsInput = File.OpenRead("D:\\input.zip"))
using (var zf = new ZipFile(fsInput))
{
// Set password if required
zf.Password = "12345";
// Unzip data
foreach (ZipEntry zipEntry in zf)
{
if (!zipEntry.IsFile)
{
// Ignore directories
continue;
}
String entryFileName = zipEntry.Name;
var directoryName = "D:\\output\\test";
if (directoryName.Length > 0)
{
Directory.CreateDirectory(directoryName);
}
var buffer = new byte[4096];
using (var zipStream = zf.GetInputStream(zipEntry))
using (Stream fsOutput = File.Create("data.zip"))
{
StreamUtils.Copy(zipStream, fsOutput, buffer);
}
}
}
암호로 보호된 ZIP 파일 만들기
SharpZipLib는 소프트웨어 개발자에게 폴더 내의 모든 파일을 ZIP 파일로 압축하고 생성된 파일의 암호를 정의할 수 있는 기능을 제공합니다. 보호 없이 ZIP 파일을 생성하려면 값을 null로 설정하거나 암호 보호 없이 파일을 떠나도록 선언하지 마십시오. 많은 수의 파일을 지원합니다.
암호로 보호된 ZIP 파일 만들기 - C#
// Create a new ZIP file
using (FileStream fsOut = File.Create("D:\\output.zip"))
using (var zipStream = new ZipOutputStream(fsOut))
{
//0-9, 9 being the highest level of compression
zipStream.SetLevel(3);
// Set password
zipStream.Password = "12345";
// Add files
var files = Directory.GetFiles("D:\\sample");
foreach (var filename in files)
{
var fi = new FileInfo(filename);
// Make the name in zip based on the folder
var entryName = filename.Substring(1);
// Remove drive from name and fixe slash direction
entryName = ZipEntry.CleanName(entryName);
var newEntry = new ZipEntry(entryName);
// Note the zip format stores 2 second granularity
newEntry.DateTime = fi.LastWriteTime;
newEntry.Size = fi.Length;
zipStream.PutNextEntry(newEntry);
var buffer = new byte[4096];
using (FileStream fsInput = File.OpenRead(filename))
{
StreamUtils.Copy(fsInput, zipStream, buffer);
}
zipStream.CloseEntry();
}
}