C#에서 ZIP 만들기

ZIP 아카이브는 하나 이상의 파일 또는 폴더를 압축하여 단일 컨테이너에 보관하는 데 사용됩니다. ZIP 아카이브는 파일과 폴더를 캡슐화하고 메타데이터 정보를 보유합니다. 아카이빙의 가장 일반적인 용도는 저장 또는 전송을 위한 파일 크기를 줄이고 보안을 위해 암호화를 적용하는 것입니다. 파일 압축 도구 외에도 자동화된 압축/추출 기능은 파일 업로드, 다운로드, 공유 또는 암호화를 위해 다양한 데스크톱 및 웹 응용 프로그램 내에서도 사용됩니다. 이 기사는 또한 유사한 시나리오를 대상으로 하며 C#를 사용하여 프로그래밍 방식으로 파일 또는 폴더를 압축하고 ZIP 아카이브를 만드는 몇 가지 쉬운 방법을 제시합니다.

이 문서에서는 다음 ZIP 보관 작업을 수행하는 방법을 배웁니다.

전제 조건 - C# ZIP 라이브러리

Aspose.ZIP for .NET은 .NET 애플리케이션 내에서 파일 및 폴더를 압축하거나 압축 해제하기 위한 강력하고 사용하기 쉬운 API입니다. 또한 ZIP 아카이브의 파일을 암호화하는 AES 암호화 기술을 제공합니다. NuGet에서 API를 설치하거나 다운로드 섹션에서 바이너리를 다운로드할 수 있습니다.

C#에서 ZIP 아카이브 만들기

다음은 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하는 단계입니다.

다음 코드 샘플은 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 아카이브를 만드는 방법도 다루었습니다. 이와 함께 여러 항목의 병렬 압축도 끝에서 설명합니다. 질문이나 질문이 있는 경우 포럼을 통해 문의할 수 있습니다.

또한보십시오