>  기사  >  백엔드 개발  >  .NET에서 zip 압축 및 압축 풀기

.NET에서 zip 압축 및 압축 풀기

巴扎黑
巴扎黑원래의
2016-12-19 16:35:232167검색

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. 전체 폴더를 압축합니다.
코드 ///


///패키지와 함께 폴더 및 하위 폴더 추가
///

          /// 폴더 추가 /// 기존 파일 재정의
                                                                 > ~ 부울 결과 = 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">보관 파일
/// 기존 파일 덮어쓰기 //
          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).
                                                                                                             ~

코드

<기본 확장="vsixmanifest" ContentType="text/xml" " />

>

마찬가지로 , 압축파일에 [content]의 .xml 파일이 포함되어 있지 않거나, [content]의 .xml 파일에 해당 확장자에 대한 설명이 포함되어 있지 않은 경우([content] ].xml을 수동으로 추가하는 것도 가능) 파일의 압축이 풀리지 않습니다. 둘째, 타사 라이브러리 압축을 사용한 압축 및 압축 해제에는 SharpZipLib 및 DotNetZip이 포함됩니다.

​​ 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 ; 항목 ZipEntry = new ZipEntry(Path.GetFileName(SRCFILE))
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(추출 경로)

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.