[C# 문법] C# ZIP(압축파일) 파일 다루기
- 카테고리 없음
- 2021. 11. 14. 16:59
소개
- 안녕하세요. 오늘은 C# 문법에서 .ZIP 파일, 압축파일을 다루는 방법에 대해서 알려 드리려고 합니다.
- 프로젝트를 하다보면, 파일을 많이 다루게 되고 또한 압축 파일도 다루는 경우들이 필요한데요. 이럴때 매우 유용한 기능이라고 생각합니다.
- 또한, .NET 프레임워크 4.5 부터 ZIP 아카이브 파일을 처리하는 클래스가 추가되어 보다 더 손쉽게 ZIP 파일을 다룰 수 있습니다.
1. 압축파일의 파일 목록 구하기
- 첫 번째로, 압축파일의 파일 목록 구하는 방법에 대해서 알려드리겠습니다.
using System;
using System.IO.Compression;
namespace test
{
class Program
{
static void Main(string[] args)
{
var archiveFile = @"C:\Users\Desktop\test.zip";
using (ZipArchive zip = ZipFile.OpenRead(archiveFile))
{
var entries = zip.Entries;
foreach (var item in entries)
{
Console.WriteLine(item.FullName);
}
}
}
}
}
BenchMarkTest/.vs/
BenchMarkTest/.vs/BenchMarkTest/
BenchMarkTest/.vs/BenchMarkTest/DesignTimeBuild/
BenchMarkTest/.vs/BenchMarkTest/DesignTimeBuild/.dtbcache.v2
BenchMarkTest/.vs/BenchMarkTest/v16/
BenchMarkTest/.vs/BenchMarkTest/v16/.suo
BenchMarkTest/BenchMarkTest.sln
BenchMarkTest/BenchMarkTest/
BenchMarkTest/BenchMarkTest/BenchMarkTest.csproj
...
- ZipFile 클래스에 있는 OpenRead 메서드를 사용하면 ZipArchive의 인스턴스를 생성할 수 있습니다.
- 이 인스턴스에서 Entries 속성을 참조하면 아카이브에 저장된 파일의 목록을 구할 수 있습니다.
- Entries 속성의 형은 다음과 같습니다.
- 이후부터는 아카이브에 저장된 파일을 엔트리라고 합니다.
2. 압축파일에서 임의의 파일을 추출하기
- 압축파일에서 임의 파일을 추출하는 방법에 대해서 알려 드리도록 하겠습니다.
using System.IO;
using System.IO.Compression;
using System.Linq;
namespace test
{
class Program
{
static void Main(string[] args)
{
var archiveFile = @"C:\Users\Desktop\test.zip";
string name = "test";
using (ZipArchive zip = ZipFile.OpenRead(archiveFile))
{
ZipArchiveEntry entries = zip.Entries.FirstOrDefault(x => x.Name.Contains(name));
if (entries != null)
{
var destPath = Path.Combine(@"C: \Users\Desktop\zip", entries.FullName);
Directory.CreateDirectory(Path.GetDirectoryName(destPath));
entries.ExtractToFile(destPath, overwrite: true);
}
}
}
}
}
- 위와 같이 ZipArchiveEntry의 확장 메서드인 ExtractToFile메서드를 통해 파일에 씁니다.
- ZipFile.OpenRead로 얻은 객체에 있는 Entries 속성의 형은 ReadOnlyCollection
입니다. ReadOnlyCollection<T>
는IEnumerable<T>
인터페이스를 구현하므로 LINQ를 이용할 수 있습니다.
728x90
이 글을 공유하기