私はこれに2日間頭を悩ませてきました。7ZipSharp を使用して、複数のソース ファイル (実際には受信メール) から .7z ファイルを作成しています。
アプリケーションを最適化するために、ハードディスクへのアクセスを避けたいので、CompressStreams 関数ファミリーに切り替えました。
Streams の代わりにファイル名を使用するコードは完全に機能します。Streams に切り替えると、CompressionMode = Append の場合にのみ「KeyNotFoundException」が発生します。
私のテストコード:
for (var i = 0; i < numFiles; i++)
{
//if(i > 0)
// compressor.CompressionMode = CompressionMode.Append;
Console.WriteLine("Adding copy num " + (i + 1) + " to the archive");
SevenZipUtil.AddStream(File.OpenRead(sampleFile), "email-" + i + ".eml", outFile);
}
ヘルパー メソッド コード:
public static void AddStream(Stream inStream, string fileName, string destinationFile)
{
SevenZipCompressor comp = new SevenZipCompressor();
comp.ArchiveFormat = OutArchiveFormat.SevenZip;
comp.CompressionLevel = CompressionLevel.Ultra;
if(File.Exists(destinationFile))
{
comp.CompressionMode = CompressionMode.Append;
}
FileStream outStream = File.OpenWrite(destinationFile);
comp.DefaultItemName = fileName;
comp.CompressStream(inStream, outStream);
outStream.Flush();
outStream.Close();
}
エラーの原因は、ファイル LibraryManager.cs、メソッド InArchive、428 行目です。
if (_inArchives[user][format] == null
要約する:
- ストリームの代わりにファイルを追加、OK
- モードの CompressStream = 作成、OK
- その後、mode = Append の CompressStream は失敗します。
複数のストリームを .7z ファイルに追加する作業コードはありますか、それとも、これは SevenZipSharp フォーラムに投稿する必要があるバグでしょうか?
ありがとう、