System.IO.Compression.ZipArchive
Example
파일에서 읽는 방법
public string ReadMusicXml(string path)
{
using (var zippedStream = new FileStream(path, FileMode.Open))
{
using (var archive = new ZipArchive(zippedStream))
{
foreach (var entry in archive.Entries)
{
if (entry.Name == ".xml")
{
using (var unzippedEntryStream = entry.Open())
{
using (var ms = new MemoryStream())
{
unzippedEntryStream.CopyTo(ms);
// return ms.ToArray();
var unzippedArray = ms.ToArray();
return Encoding.Default.GetString(unzippedArray);
}
}
}
}
}
}
throw new FileNotFoundException();
}
메모리에서 읽는 방법
using System.IO; // MemoryStream
using System.Text; // Encoding
/// <summary>
/// Zip and Unzip in memory using System.IO.Compression.
/// </summary>;
/// <remarks>
/// Include System.IO.Compression in your project.
/// </remarks>
public static class ZipHelper
{
/// <summary>
/// Zips a string into a zipped byte array.
/// </summary>
/// <param name="textToZip">The text to be zipped.</param>
/// <returns>byte[] representing a zipped stream</returns>
public static byte[] Zip(string textToZip)
{
using (var memoryStream = new MemoryStream())
{
using (var zipArchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
{
var demoFile = zipArchive.CreateEntry("zipped.txt");
using (var entryStream = demoFile.Open())
{
using (var streamWriter = new StreamWriter(entryStream))
{
streamWriter.Write(textToZip);
}
}
}
return memoryStream.ToArray();
}
}
/// <summary>
/// Unzip a zipped byte array into a string.
/// </summary>
/// <param name="zippedBuffer">The byte array to be unzipped</param>
/// <returns>string representing the original stream</returns>
public static string Unzip(byte[] zippedBuffer)
{
using (var zippedStream = new MemoryStream(zippedBuffer))
{
using (var archive = new ZipArchive(zippedStream))
{
var entry = archive.Entries.FirstOrDefault();
if (entry != null)
{
using (var unzippedEntryStream = entry.Open())
{
using (var ms = new MemoryStream())
{
unzippedEntryStream.CopyTo(ms);
var unzippedArray = ms.ToArray();
return Encoding.Default.GetString(unzippedArray);
}
}
}
return null;
}
}
}
}
Troubleshooting
ZipArchive 를 System.IO.Compression 에서 찾을 수 없다
프로젝트 파일(.csproj)에 다음 내용을 추가한다.