2017-01-20 3 views
0

.net 4.5에서 System.IO.Compression을 사용하고 있으며 ZipArchive 및 ZipFile을 사용하여 txt 파일을 아카이브에 추가합니다. 약 75 개의 파일이 있습니다. 파일을 폴더에 넣고 크기를 측정했을 때 약 15 KB압축하지 않은 ZipArchive ZipFile

그러나 ZipArchive를 사용하여 아카이브를 넣을 때 생성 된 zip 파일 크기는 21KB였습니다. 내가 잘못했거나이 ZipArhive가 파일을 압축하는 대신 파일 하나만 보관하는 것입니까?

.zip 생성에 사용되는 축약 표현식입니까? 이것은 내가 한 일입니다. .7zip 파일 크기? 사용될 수있는 높은 수준의 압축이 1킬로바이트 주위에도 작다에만

zip 파일의 각 엔트리는 76 바이트의 로컬 및 중앙 헤더의 오버 헤드를 가지고
using (ZipArchive zippedFile = ZipFile.Open(zipFileName, ZipArchiveMode.Create)) 
       { 
        foreach (string file in filesTobeZipped) 
        { 
         zippedFile.CreateEntryFromFile(file, Path.GetFileName(file), CompressionLevel.Optimal); 
        } 
       } 

답변

1

플러스 경로가있는 파일 이름의 길이, 두 번, 22 바이트의 단일 종료 레코드. 예를 들어 3 자의 이름을 가진 75 개의 파일의 경우 총 오버 헤드는 약 6K가됩니다. 각 파일은 압축되지 않은 길이가 평균 약 200 바이트이므로 압축하기에는 너무 짧습니다. 각 파일이 zip 파일의 200 바이트 항목으로 남아 있으면 21K zip 파일로 끝납니다. 사실 당신이 가진 것입니다.

+0

그래서 1KB의 최소 파일 크기와 100-1000 파일의 배치에 대해 너무 많은 압축을 기대할 필요가 없으며 모든 크기의 실제 크기보다 거의 비슷한 크기가 될 것입니다 이 파일들? – rahulmr

+0

예 ............ –

+0

드라이브에있는 각 파일의 공간도 그 이상입니다. 1Y이트 파일이 차지하는 공간은 운영 체제에 따라 512 또는 1024Y이트입니다. 그리고 이것은 심지어 해당 디렉토리 엔트리가 차지하는 공간을 계산하지도 않습니다. –