0
を返します:アーカイブを作成した後、抽出プロセスが動作するため、実際にはすべてが、作品圧縮PDFファイル私はこのコードでDotNetZipを使用して2つのpdfファイルを圧縮しようとしている、破損したアーカイブ
void Main()
{
byte[] file1 = File.ReadAllBytes(@"C:\temp\a.pdf");
byte[] file2 = File.ReadAllBytes(@"C:\temp\b.pdf");
//byte[] file3 = File.ReadAllBytes(@"C:\temp\c.pdf");
byte[] zip = Zipper.CreateZipFromFileContentList(new List<Tuple<string, byte[]>> {
new Tuple<string, byte[]>(@"a.pdf", file1),
new Tuple<string, byte[]>(@"b.pdf", file2)//,
//new Tuple<string, byte[]>(@"c.pdf", file3)
});
File.WriteAllBytes(@"C:\temp\c.zip", zip);
using(Ionic.Zip.ZipFile zipFile = Ionic.Zip.ZipFile.Read(@"C:\temp\c.zip"))
{
foreach(ZipEntry entry in zipFile)
{
entry.Extract(@"C:\temp\t");
}
}
}
// Define other methods and classes here
static class Zipper
{
public static byte[] CreateZipFromFileContentList(IList<Tuple<string, byte[]>> fileContentList)
{
try
{
using (ZipFile zip = new ZipFile())
{
int i = 0;
foreach (var item in fileContentList)
{
ZipEntry entry = null;
entry = zip.AddEntry(item.Item1, item.Item2);
++i;
}
MemoryStream ms = new MemoryStream();
zip.Save(ms);
return ms.GetBuffer();
}
}
catch (Exception)
{
throw;
}
}
}
。しかし、私がwinRarを使ってzipファイルを開こうとすると、アーカイブが壊れているというメッセージが表示されます。私が7Zipで試してみると、便利なブロックの終わりを越えるデータがあるというメッセージが表示されます(翻訳されていれば、英語版がまったく同じメッセージを出しているかどうかわかりません)。
ファイルを1つまたは3つ圧縮すると、まったく問題はありません。 どうすれば修正できますか?
これを通常のテキストファイルで試しましたか? 2つのテキストファイルを圧縮して解凍できますか? – rossum
.GetBufferはストリームの内部バッファを返します。その一部には有効なデータが含まれているため、代わりに.ToArray()を使用するため、ジップ出力に余分なバイトが含まれている可能性があります。 –
@AlexK。問題を修正したので、答えを出してください。それを正しいものとして受け入れます – Phate01