11

次のコードを使用してファイルを圧縮していますが、正常に動作しますが、WinRar で解凍すると、拡張子なしで元のファイル名がmyReport.xls取得されmyReportます。

using (var fs = new FileStream(fileName, FileMode.Open))
{
    byte[] input = new byte[fs.Length];
    fs.Read(input, 0, input.Length);
    fs.Close();

    using (var fsOutput = new FileStream(zipName, FileMode.Create, FileAccess.Write))
    using(var zip = new GZipStream(fsOutput, CompressionMode.Compress))
    {
        zip.Write(input, 0, input.Length);
        zip.Close();
        fsOutput.Close();
    }
}
4

2 に答える 2

25

GZip は、名前を知らなくても 1 つのファイルのみを圧縮します。したがって、ファイルを圧縮する場合myReport.xlsは、myReport.xls.gz. 解凍すると、最後のファイル拡張子が削除されるため、元のファイル名になります。

それは、Unix/Linuxで長年にわたって使用されている方法です...

于 2011-10-14T11:28:03.480 に答える
2

確かに非常に奇妙です。簡単に検索すると、次のような結果が得られました。

http://dotnetzip.codeplex.com/discussions/268293

これは、GZipStream が書き込まれているストリームの名前を知る方法がないことを示しており、FileNameプロパティを直接設定することをお勧めします。

それが役立つことを願っています。

于 2011-10-14T11:02:17.027 に答える