一部のファイルを圧縮するために、SevenZipSharp Lib をダウンロードします。
ファイルを圧縮するためにこれを使用しました:
var libPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "7-zip", "7z.dll");
SevenZip.SevenZipCompressor.SetLibraryPath(libPath);
SevenZip.SevenZipCompressor compressor = new SevenZipCompressor();
compressor.CompressFiles(@"C:\myTestFile.mdf", new string[] { @"C:\myTestFileCompressed.7z" });
これで、私のファイルは問題なく圧縮されます。解凍できます。
今...同じファイルを圧縮したいのですが、ファイルを直接圧縮するのではなく、次のことを行いたいです:
- ファイルを文字列で読み取ります。はい、バイト[]ではなく、文字列で。
- 文字列を byte[] に変換する byte[] を別の byte[] に圧縮します。
これが私の試みです:
string strToCompress = File.ReadAllText(@"C:\myTestFile.mdf");
SevenZipCompressor compressor = new SevenZipCompressor();
byte[] byteArrayToCompress = Encoding.ASCII.GetBytes(text);
MemoryStream stream = new MemoryStream(byteArrayToCompress);
MemoryStream streamOut = new MemoryStream();
compressor.CompressStream(stream, streamOut);
string strcompressed = Encoding.ASCII.GetString(streamOut.ToArray());
File.WriteAllText(@"C:\myfileCompressed.7z",strcompressed);
私の問題は非常に単純です:
これら 2 つの方法で生成されたサイズを比較すると、3 603 443 バイトと 3 604 081 バイトです。また、2 番目の方法で生成されたファイルを解凍することはできません。
ASCIIエンコーディングを使用したためかもしれませんが、圧縮するファイルはテキストではなく、バイナリファイルです。
誰でもそれを解決する方法を説明できますか? ファイルを文字列に読み取って圧縮する必要があります。(ファイルをバイト[]に直接読み込みたくありません)。
どうもありがとう、
よろしくお願いします、
ニクセウス