約1.5GBのフォルダーからzipファイルを作成し、そのzipファイルを100MBのチャンクに分割したいと考えています。これについてかなりの数のスレッドを見つけましたが、何もうまくいきませんでした。
最初に System.IO.Compression を試しましたが、zip ファイルの分割をサポートしていないことがわかりました (間違っていたら訂正してください!)。
次に Ionic.zip を試してみましたが、これは非常に簡単に見えましたが、作成したファイルのすべてのセットが何らかの形で破損しています (たとえば、fonts ディレクトリをテスト ディレクトリとして使用する次のコードは、作成できないファイルのセットを作成します)。次に、winzip または winrar のいずれかでアーカイブとして開くか解凍します):
using (var zipFile = new Ionic.Zip.ZipFile(Encoding.UTF8))
{
zipFile.AddDirectory("c:\\windows\\fonts", directoryPathInArchive: string.Empty);
zipFile.MaxOutputSegmentSize = 100 * 1000000;
zipFile.Save("c:\\users\\me\\test.zip");
}
最後に、7z.dll と SharpCompress を試しました。コマンド ラインと 7z.exe ファイルを使用すると、以下が完全に機能します。
7z.exe a "c:\users\me\test.zip" "c:\Windows\Fonts" -v100m
ただし、次のコードでは、「値が期待される範囲内にありません」というエラーが発生します。
SevenZipCompressor.SetLibraryPath("c:\\program files\\7-zip\\7z.dll");
var compressor = new SevenZipCompressor();
compressor.CompressionMethod = CompressionMethod.Lzma2;
compressor.CustomParameters.Add("v", "100m");
compressor.CompressDirectory("c:\\windows\\fonts\\", "c:\\users\\me\\test.zip");
また、zipファイルを作成しますが、分割しません:
SevenZipCompressor.SetLibraryPath("c:\\program files\\7-zip\\7z.dll");
var compressor = new SevenZipCompressor();
compressor.CompressionMethod = CompressionMethod.Lzma2;
compressor.CustomParameters.Add("mt", "on");
compressor.CustomParameters.Add("0", "LZMA2:c=100m");
compressor.CompressDirectory("c:\\windows\\fonts\\", "c:\\users\\me\\test.zip");
上記の方法のいずれかが機能しない理由を誰かが知っていますか? それとも、私がまだ試していない他の方法がありますか?
ありがとう!