System.IO.Compression을 사용하여 메모리에 ZIP 아카이브 생성: 잘못된 ZIP 오류 극복
ZIP 아카이브를 생성하려고 할 때 MemoryStream을 사용하여 메모리를 사용하면 아카이브가 생성되었지만 원하는 콘텐츠가 부족한 문제가 발생할 수 있습니다. 이 문제는 아카이브를 완료하기 위해 체크섬과 같은 최종 바이트를 아카이브에 써야 하기 때문에 발생합니다.
이 문제를 해결하려면 다음 수정된 코드를 사용할 수 있습니다.
using (var memoryStream = new MemoryStream()) { using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) { var demoFile = archive.CreateEntry("foo.txt"); using (var entryStream = demoFile.Open()) using (var streamWriter = new StreamWriter(entryStream)) { streamWriter.Write("Bar!"); } } using (var fileStream = new FileStream(@"C:\Temp\test.zip", FileMode.Create)) { memoryStream.Seek(0, SeekOrigin.Begin); memoryStream.CopyTo(fileStream); } }
여기서 중요한 차이점은 ZipArchive 생성자의 세 번째 매개변수가 true로 설정되어 있다는 것입니다. 이 매개 변수는 기본 스트림을 닫지 않고 ZipArchive를 삭제할 수 있음을 나타냅니다. 이를 통해 아카이브 생성 후 MemoryStream을 재사용할 수 있습니다.
수정된 코드를 사용하면 MemoryStream을 사용하는 경우에도 원하는 내용으로 메모리에 ZIP 아카이브를 성공적으로 생성할 수 있습니다. 이러한 유연성을 통해 중간에 파일을 처리할 필요 없이 다양한 시나리오에서 아카이브를 조작할 수 있습니다.
위 내용은 C#을 사용하여 메모리 내 ZIP 아카이브를 성공적으로 생성하고 '잘못된 ZIP' 오류를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!