Zip 압축 및 압축 해제는 .NET에서 다양한 방법으로 수행할 수 있습니다. 1. System.IO.Packaging 프로그램 사용 2. 타사 클래스 라이브러리 사용 3. System.IO.Compression에 새 기능 추가 네임스페이스 ZipArchive, ZipFile 클래스 등 구현
먼저 System.IO.Packaging 프로그램을 사용하여 압축 및 압축 해제
패키지는 객체를 하나의 정의된 개체로 구성하는 데 사용할 수 있는 추상 클래스입니다. 물리적 형식 엔터티이므로 이식성과 효율적인 액세스가 가능하며 ZIP 파일은 패키지의 주요 물리적 형식입니다. 다른 패키지 구현에서는 XML 문서, 데이터베이스 또는 웹 서비스와 같은 다른 물리적 형식을 사용할 수 있습니다. 파일 시스템과 유사하게 패키지에 포함된 항목은 계층적으로 구성된 폴더 및 파일에서 참조됩니다. 이 메서드는 기본적으로 ZipPackage 파생 클래스를 사용합니다. System.IO.Packaging 프로그램은 WindowsBase.dll의 어셈블리 아래에 있습니다. 1. 전체 폴더를 압축합니다.
코드 ///
///패키지와 함께 폴더 및 하위 폴더 추가
///
/// 폴더 추가 param> /// 기존 파일 재정의 param>
> ~ 부울 결과 = FALSE; 🎜> 기존 && 파일 재정의(압축된 파일 이름) )
{
FileMode.Create))
{ .EnumerateFiles(폴더 이름, "*", SearchOption.AllDirectories)
foreach (string fileList의 파일 이름)
🎜> 이름 뒤의 하위 폴더
String pathInPackage
Uri partUriDocument = PackUriHelper.CreatePartUri(new URI(pathInPackage, UriKind.Relative));
PackagePart packagePartDocument = package.CreatePart(partUriDocument,"",CompressionOption.Maximum) FileStream FILESTREAM = new FileStream(FileName, FileMode) .열기, 파일액세스.읽기))
> 🎜> 결과 = True; Ran 폴더" 폴더 이름 +, E);
~ ZIP 파일로 컨테이너 저장소
// /
param name = "compressedFileName">보관 파일 param>
/// 기존 파일 덮어쓰기 param> //
static boolean PackageFile(String filename, String compressedFileName, boolean overrideExisting) ists(파일 이름)! )
{
결과를 반환합니다.
}
시도해 보세요
(패키지 = Package.Open(compressedFileName, FileMode.OpenOrCreate))
사용
🎜> package.DeletePart(partUriDocument); "", 압축 옵션. 최대),
(FileStream FILESTREAM = new FileStream(FileName, FileMode.Open, FileAccess.Read)) 사용
~ ~ .异> 새로운 이상 현상 발생("오류 압축 파일"+파일 이름, E)
}
결과 반환 /// <요약>
///추출 용기의 우편번호입니다. 참고: 컨테이너는 OPC(Open Packaging Convention) 사양으로 생성되어야 합니다.
///
/ param> /// Package 파일
;
<
결과를 반환
DirectoryInfo (폴더 이름); 정보가 존재함)
directoryInfo.Create();
package.GetParts()의 PackagePart의 PackagePart(Package = Package.Open(compressedFileName, FileMode.Open, FileAccess.Read)) 사용
~ 예외 5)
반환 결과;
}
정적 유효하지 않은 ExtractPart(PackagePart of PackagePart, Strings TargetDirectory, Burrideexisting)
{
String Stringpart = TargetDirectory RLDECODE(packagepart.uri.tostring()) 교체(' \', ' /').
If (Directory.Exists(Path.GetDirectoryName(stringPart))!)
Directory.CreateDirectory(Path.GetDirectoryName(stringPart))
If (!overrideExisting && File.Exists (stringPart))
.GetStream()CopyTo FROM(FILESTREAM).
~
코드 XML 버전="1.0" 인코딩="UTF-8"? >
<기본 확장="vsixmanifest" ContentType="text/xml" " />
1. "#ziplib"로도 알려진 SharpZipLib은 GPL 오픈 소스를 기반으로 하며 tar 및 BZip2 압축을 포함한 ZIP, GZIP의 압축 및 압축 해제를 지원합니다.
.NET 1.1, .NET 2.0(3.5, 4.0)을 지원합니다.
(1) ZIP 압축
Codepublic 정적 유효하지 않은 zip(String SRCFILE, String DstFile, int 버퍼 크기)
{
FileStream fileStreamIn = new FileStream
(SRCFILE, FileMode.Open, FileAccess.Read);
FileStream fileStreamOut = new FileStream
(DstFile, FileMode.Create, FileAccess.Write);
ZipOutputStream zipOutStream = new ZipOutputStream(fileStreamOut)
바이트[] buffer = new Bytes
zipOutStream.PutNextEntry(Input )
INT size; 🎜> {
size = fileStreamIn.Read(buffer, 0, buffer.Length);
zipOutStream.Write(buffer, 0, size) while(size>0); .Close();
fileStreamOut.Close();
fileStreamIn.Close()
} (2) Unzip zipCode public static valid Unzip(String SRCFILE, String DstFile, int buffer size) {
FileStream fileStreamIn = new FileStream
(SRCFILE, FileMode.Open, FileAccess.Read)
ZipInputStream zipInStream = new ZipInputStream(fileStreamIn)
ZipEntry 항목 = zipInStream.GetNextEntry(); > FileStream fileStreamOut = new FileStream
(DstFile + @"" + Entry.Name, FileMode.Create, FileAccess.Write)
int size
bytes[] buffer = 새 바이트 <버퍼 크기/ >;
do
{
size = zipInStream.Read(buffer, 0, buffer.Length)
fileStreamOut.Write(buffer, 0, size)
} while(size) > 0);
zipInStream.Close();
fileStreamIn.Close()
} 2. DotNetLib은 "WS-PL" 오픈 소스를 기반으로 합니다. 비교적 사용이 간편함 (1) 압축 코드 사용법(ZipFile = new ZipFile()을 사용하는 zip)
{
zip.AddFile("readme.txt")
zip.AddFile("7440-N49th. png");
zip.AddFile("2008_Annual_Report.pdf");
zip.Save("Archive.zip");
} (2) Unzip Codeprivate 잘못된 MyExtract()
{
String zipToUnpack = "C1P3SML.zip";
String unpackDirectory = "파일의 압축을 푼다”;
(ZIP1을 사용하여 ZipFile = ZipFile.Read(zipToUnpack))
{
//여기, 각 항목을 추출하지만 항목 이름, 크기, 날짜, 체크박스 상태 등에 따라 조건부로
을 추출할 수 있습니다. //
foreach (ZIP1의 ZipEntry의 E)
}
}
}
3. ZipArchive, ZipFile 및 기타 클래스를 사용하여 .NET 4.5에서 압축 및 압축 해제
주 코드가 정적으로 유효하지 않습니다(문자열 [] args).
{String NEWFILE = @"C:User exampleuser NewFile.txt"
(ZipArchive archive = ZipFile.Open(ZipPath, ZipArchiveMode.Update))
.CreateEntryFromFile(NEWFILE "NewEntry .txt")
Archive.ExtractToDirectory(추출 경로)