ZIP 아카이브는 하나 이상의 파일 또는 폴더를 압축하여 단일 컨테이너에 보관하는 데 사용됩니다. ZIP 아카이브는 파일과 폴더를 캡슐화하고 메타데이터 정보를 보유합니다. 아카이빙의 가장 일반적인 용도는 저장 또는 전송을 위한 파일 크기를 줄이고 보안을 위해 암호화를 적용하는 것입니다. 파일 압축 도구 외에도 자동화된 압축/추출 기능은 파일 업로드, 다운로드, 공유 또는 암호화를 위해 다양한 데스크톱 및 웹 응용 프로그램 내에서도 사용됩니다. 이 기사는 또한 유사한 시나리오를 대상으로 하며 C#를 사용하여 프로그래밍 방식으로 파일 또는 폴더를 압축하고 ZIP 아카이브를 만드는 몇 가지 쉬운 방법을 제시합니다.
이 문서에서는 다음 ZIP 보관 작업을 수행하는 방법을 배웁니다.
- C#을 사용하여 ZIP 아카이브 만들기
- ZIP 아카이브에 여러 파일 추가
- ZIP 아카이브에 폴더 추가
- ZipCrypto를 사용하여 암호로 보호된 ZIP 아카이브 만들기
- AES 암호화로 ZIP 아카이브 암호화
- 병렬 압축 모드 설정
전제 조건 - C# ZIP 라이브러리
Aspose.ZIP for .NET은 .NET 애플리케이션 내에서 파일 및 폴더를 압축하거나 압축 해제하기 위한 강력하고 사용하기 쉬운 API입니다. 또한 ZIP 아카이브의 파일을 암호화하는 AES 암호화 기술을 제공합니다. NuGet에서 API를 설치하거나 다운로드 섹션에서 바이너리를 다운로드할 수 있습니다.
C#에서 ZIP 아카이브 만들기
다음은 ZIP 아카이브에 파일을 추가하여 압축하는 단계입니다.
- 출력 ZIP 아카이브에 대한 FileStream 개체를 만듭니다.
- 소스 파일을 FileStream 객체로 엽니다.
- Archive 클래스의 객체를 생성합니다.
- Archive.CreateEntry(string, FileStream) 메서드를 사용하여 아카이브에 파일을 추가합니다.
- Archive.Save(FileStream) 메서드를 사용하여 ZIP 아카이브를 만듭니다.
다음 코드 샘플은 C#을 사용하여 ZIP 아카이브에 파일을 추가하는 방법을 보여줍니다.
// 출력 ZIP 아카이브용 FileStream 생성
using (FileStream zipFile = File.Open("compressed_file.zip", FileMode.Create))
{
// 아카이브에 추가할 파일
using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive(new ArchiveEntrySettings()))
{
// 아카이브에 파일 추가
archive.CreateEntry("alice29.txt", source1);
// 압축 파일
archive.Save(zipFile);
}
}
}
C#의 ZIP 아카이브에 여러 파일 추가
여러 파일을 ZIP 아카이브에 추가하려는 경우 다음 방법 중 하나를 사용하여 추가할 수 있습니다.
FileStream을 사용하여 여러 파일 압축
이 메서드에서 FileStream 클래스는 Archive.CreateEntry(String, FileStream) 메서드를 사용하여 ZIP 아카이브에 파일을 추가하는 데 사용됩니다. 다음 코드 샘플은 C#에서 여러 파일을 ZIP에 추가하는 방법을 보여줍니다.
// 출력 ZIP 아카이브용 FileStream 생성
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
// 아카이브에 추가할 파일
using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
{
// 아카이브에 추가할 파일
using (FileStream source2 = File.Open("asyoulike.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive())
{
// 아카이브에 파일 추가
archive.CreateEntry("alice29.txt", source1);
archive.CreateEntry("asyoulik3.txt", source2);
// 파일 압축
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "two files are compressed in this archive" });
}
}
}
}
FileInfo를 사용하여 여러 파일 압축
여러 파일을 ZIP 아카이브에 추가하기 위해 FileInfo 클래스를 사용할 수도 있습니다. 이 방법에서 파일은 FileInfo 클래스를 사용하여 로드되고 Archive.CreateEntry(String, FileInfo) 방법을 사용하여 ZIP 아카이브에 추가됩니다. 다음 코드 샘플은 C#에서 FileInfo 클래스를 사용하여 여러 파일을 ZIP하는 방법을 보여줍니다.
// 출력 ZIP 아카이브용 FileStream 생성
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
// 아카이브에 추가할 파일
FileInfo fi1 = new FileInfo("alice29.txt");
FileInfo fi2 = new FileInfo("fields.c");
using (var archive = new Archive())
{
// 아카이브에 파일 추가
archive.CreateEntry("alice29.txt", fi1);
archive.CreateEntry("fields.c", fi2);
// ZIP 아카이브 만들기
archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
}
}
경로를 사용하는 ZIP 파일
ZIP 항목에 대해 FileInfo 또는 FileStream 클래스를 사용하는 대신 Archive.CreateEntry(String name, String path, Boolean openImmediately, ArchiveEntrySettings newEntrySettings) 메서드에 직접 파일 경로를 제공할 수 있습니다. 다음 코드 샘플은 경로를 사용하여 파일을 ZIP하는 방법을 보여줍니다.
// 출력 ZIP 아카이브용 FileStream 생성
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
// 아카이브 생성
using (var archive = new Archive())
{
// ZIP 아카이브에 파일 추가
archive.CreateEntry("data.bin", "file.dat");
archive.Save(zipFile);
}
}
C#에서 ZIP 아카이브에 폴더 추가
ZIP 아카이브에 여러 파일을 추가하는 또 다른 대안이 될 수 있는 폴더를 ZIP할 수도 있습니다. 소스 파일을 폴더에 넣고 해당 폴더를 ZIP 아카이브에 추가하기만 하면 됩니다. 다음은 폴더를 ZIP하는 단계입니다.
- 출력 ZIP 아카이브에 대한 FileStream 클래스의 개체를 만듭니다.
- Archive 클래스의 인스턴스를 만듭니다.
- DirectoryInfo 클래스를 사용하여 압축할 폴더를 지정합니다.
- Archive.CreateEntries(DirectoryInfo) 메서드를 사용하여 ZIP에 폴더를 추가합니다.
- Archive.Save(FileStream) 메서드를 사용하여 ZIP 아카이브를 만듭니다.
다음 코드 샘플은 C#에서 ZIP에 폴더를 추가하는 방법을 보여줍니다.
// 출력 ZIP 아카이브용 FileStream 생성
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
using (Archive archive = new Archive())
{
// 압축할 폴더
DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
archive.CreateEntries(corpus);
// ZIP 아카이브 만들기
archive.Save(zipFile);
}
}
C#에서 ZipCrypto를 사용하여 암호로 보호된 ZIP 만들기
암호를 사용하여 ZIP 아카이브를 보호하고 ZipCrypto 암호화를 적용할 수 있습니다. 이를 위해 ArchiveEntrySettings 클래스는 두 번째 매개변수로 암호화 유형을 허용하는 Archive 생성자에서 사용됩니다.
다음 코드 샘플은 C#에서 ZipCrypto를 사용하여 암호로 보호된 ZIP 아카이브를 만드는 방법을 보여줍니다.
// 출력 ZIP 아카이브용 FileStream 생성
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
using (Archive archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$"))))
{
// 아카이브에 폴더 추가
DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
archive.CreateEntries(corpus);
// ZIP 아카이브 만들기
archive.Save(zipFile);
}
}
C# AES 암호화로 암호로 보호된 ZIP 만들기
Aspose.ZIP for .NET을 사용하면 AES 암호화를 적용하여 ZIP 아카이브를 보호할 수도 있습니다. 다음 AES 암호화 방법을 사용할 수 있습니다.
- AES128
- AES192
- AES256
API는 AES 암호화를 적용하기 위해 AesEcryptionSettings 클래스를 제공합니다. 다음 코드 샘플은 C#에서 AES 암호화를 사용하여 암호로 보호된 ZIP을 만드는 방법을 보여줍니다.
// 출력 ZIP 아카이브용 FileStream 생성
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
using (Archive archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES128))))
{
// 보관할 폴더 추가
DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
archive.CreateEntries(corpus);
// ZIP 아카이브 만들기
archive.Save(zipFile);
}
}
병렬 압축 모드 설정
항목이 여러 개인 경우 병렬 압축을 위해 API를 구성할 수도 있습니다. 이를 위해 ParallelOptions 클래스를 사용하여 병렬 압축 모드를 지정할 수 있습니다. .NET용 Aspose.ZIP은 다음과 같은 병렬 압축 모드를 제공합니다.
- Never - 병렬로 압축하지 마십시오.
- 항상 - 병렬로 압축합니다(메모리 부족 주의).
- 자동 - 항목에 병렬 압축을 사용할지 여부를 결정합니다. 이 옵션은 일부 항목을 병렬로만 압축할 수 있습니다.
다음 코드 샘플은 여러 파일을 압축하는 동안 병렬 압축 모드를 설정하는 방법을 보여줍니다.
// 전체 예제 및 데이터 파일을 보려면 https://github.com/aspose-zip/Aspose.ZIP-for-.NET으로 이동하십시오.
using (FileStream zipFile = File.Open(dataDir + "UsingParallelismToCompressFiles_out.zip", FileMode.Create))
{
using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
{
using (FileStream source2 = File.Open(dataDir + "asyoulik.txt", FileMode.Open, FileAccess.Read))
{
using (var archive = new Archive())
{
archive.CreateEntry("alice29.txt", source1);
archive.CreateEntry("asyoulik.txt", source2);
//병렬 처리 기준 정의
var parallelOptions = new ParallelOptions
{
ParallelCompressInMemory = ParallelCompressionMode.Always
};
archive.Save(zipFile,
new ArchiveSaveOptions()
{
ParallelOptions = parallelOptions,
Encoding = Encoding.ASCII,
ArchiveComment = "There are two poems from Canterbury corpus"
});
}
}
}
}
.NET용 Aspose.ZIP에 대해 자세히 알아보기
다음 리소스를 사용하여 C# ZIP API에 대해 자세히 알아보세요.
결론
이 기사에서는 C#에서 프로그래밍 방식으로 ZIP 아카이브를 만드는 방법을 배웠습니다. 코드 샘플은 ZIP 아카이브에 파일과 폴더를 추가하는 방법을 보여주었습니다. 또한 C#에서 ZipCrypto 및 AES 암호화 방법을 사용하여 암호로 보호된 ZIP 아카이브를 만드는 방법도 다루었습니다. 이와 함께 여러 항목의 병렬 압축도 끝에서 설명합니다. 질문이나 질문이 있는 경우 포럼을 통해 문의할 수 있습니다.