zip 파일이 있으면 지정한 압축 수준 (예 : 압축 없음)으로 다시 만들어야합니다.다른 zip 파일에서 zip 파일 다시 만들기
나는 거의 다 해요,하지만 오류 얻을 : 나는 창문에 다시 zip 파일을 저장하는 경우가 올바른지처럼
Failed: Number of entries expected in End Of Central Directory does not correspond to number of entries in Central Directory.
, 보이는 (정확한 파일 크기, 항목 모두 올바른 파일 크기로 존재) 파일은 추출 할 수 없습니다. 내가 할 경우 함수의 끝에
public static byte[] ReCompress(byte[] originalArchive, CompressionLevel newCompressionLevel)
{
var entries = new Dictionary<string, byte[]>();
///////////////////////////
// STEP 1: EXTRACT ALL FILES
///////////////////////////
using (var ms = new MemoryStream(originalArchive))
using (var originalZip = new ZipArchive(ms, ZipArchiveMode.Read))
{
foreach (var entry in originalZip.Entries)
{
var isFolder = entry.FullName.EndsWith("/");
if (!isFolder)
{
using (var stream = entry.Open())
using (var entryMS = new MemoryStream())
{
stream.CopyTo(entryMS);
entries.Add(entry.FullName, entryMS.ToArray());
}
}
else
{
entries.Add(entry.FullName, new byte[0]);
}
}
}
///////////////////////////
// STEP 2: BUILD ZIP FILE
///////////////////////////
using (var ms = new MemoryStream())
using (var newArchive = new ZipArchive(ms, ZipArchiveMode.Create, true))
{
foreach (var uncompressedEntry in entries)
{
var newEntry = newArchive.CreateEntry(uncompressedEntry.Key, newCompressionLevel);
using (var entryStream = newEntry.Open())
using (var writer = new BinaryWriter(entryStream, Encoding.UTF8))
{
writer.Write(uncompressedEntry.Value);
}
}
return ms.ToArray();
}
}
: 그것은 제대로 구조 아카이브를 생성
File.WriteAllBytes(@"D:\test.zip", ms.ToArray());
는 90mb
크기 있지만 파일이 추출되지 않습니다.
return ms.ToArray()
으로 끝나면 ~130kb
바이트 배열을 반환합니다.
그럼 먼 길 주변에 임시 위치로 첫 번째 아카이브를 추출하고 새로운 아카이브로 다시 압축하는 것입니다. – Nkosi