.NET Framework
Zip 파일 읽기 및 쓰기
수색…
소개
ZipFile 클래스는 System.IO.Compression 네임 스페이스에 있습니다. 이 파일은 Zip 파일에서 읽고 Zip 파일에 쓸 수 있습니다.
비고
FileStream 대신 MemoryStream을 사용할 수도 있습니다.
예외
예외 | 조건 |
---|---|
ArgumentException | 스트림이 이미 닫혀 있거나 스트림의 기능이 모드와 일치하지 않습니다 (예 : 읽기 전용 스트림에 쓰려고 시도). |
ArgumentNullException | 입력 스트림 이 null |
ArgumentOutOfRangeException | 모드의 값이 잘못되었습니다. |
InvalidDataException | 아래 목록 참조 |
InvalidDataException 가 슬로우되면 (자), 3 개의 원인이있을 가능성이 있습니다.
- 스트림의 내용을 zip 아카이브로 해석 할 수 없습니다.
- 모드 가 업데이트이고 항목이 아카이브에서 누락되었거나 손상되어 읽을 수 없습니다.
- 모드 가 Update이고 항목이 너무 커서 메모리에 맞지 않습니다.
모든 정보는 이 MSDN 페이지 에서 가져온 것입니다 .
ZIP 내용 나열
이 스 니펫은 zip 아카이브의 모든 파일 이름을 나열합니다. 파일 이름은 zip 루트에 상대적입니다.
using (FileStream fs = new FileStream("archive.zip", FileMode.Open))
using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Read))
{
for (int i = 0; i < archive.Entries.Count; i++)
{
Console.WriteLine($"{i}: {archive.Entries[i]}");
}
}
ZIP 파일에서 파일 압축 해제
모든 파일을 디렉토리로 추출하는 것은 매우 쉽습니다.
using (FileStream fs = new FileStream("archive.zip", FileMode.Open))
using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Read))
{
archive.ExtractToDirectory(AppDomain.CurrentDomain.BaseDirectory);
}
파일이 이미 존재하면 System.IO.IOException 이 발생합니다.
특정 파일 압축 해제 :
using (FileStream fs = new FileStream("archive.zip", FileMode.Open))
using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Read))
{
// Get a root entry file
archive.GetEntry("test.txt").ExtractToFile("test_extracted_getentries.txt", true);
// Enter a path if you want to extract files from a subdirectory
archive.GetEntry("sub/subtest.txt").ExtractToFile("test_sub.txt", true);
// You can also use the Entries property to find files
archive.Entries.FirstOrDefault(f => f.Name == "test.txt")?.ExtractToFile("test_extracted_linq.txt", true);
// This will throw a System.ArgumentNullException because the file cannot be found
archive.GetEntry("nonexistingfile.txt").ExtractToFile("fail.txt", true);
}
이러한 메소드 중 하나라도 동일한 결과를 생성합니다.
ZIP 파일 업데이트
ZIP 파일을 업데이트하려면 대신 ZipArchiveMode.Update로 파일을 열어야합니다.
using (FileStream fs = new FileStream("archive.zip", FileMode.Open))
using (ZipArchive archive = new ZipArchive(fs, ZipArchiveMode.Update))
{
// Add file to root
archive.CreateEntryFromFile("test.txt", "test.txt");
// Add file to subfolder
archive.CreateEntryFromFile("test.txt", "symbols/test.txt");
}
아카이브 내의 파일에 직접 쓰는 옵션도 있습니다 :
var entry = archive.CreateEntry("createentry.txt");
using(var writer = new StreamWriter(entry.Open()))
{
writer.WriteLine("Test line");
}
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow