2011-10-14 19 views
6

ファイルを圧縮するのに次のコードを使用していますが、正常に動作しますが、WinRarで解凍すると、元のファイル名が拡張子なしで取得できます。のみmyReportGZipStreamは機能しますが、拡張子が失われています

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(); 
    } 
} 
+1

私の知る限りでGZipは、ファイルまたはフォルダについての考えを持っていないことを

は...大藤ZIPは、それとは非常に異なっています属性などが組み込まれています...おそらくあなたはZipライブラリを使いたいのですか? – Yahia

+0

IOWでは、GZipは圧縮形式ですが、ZIPは圧縮されたアーカイブ形式です。 (TARはアーカイブ形式の例になります) –

答えて

12

GZipは名前を知らずに1つのファイルのみを圧縮します。したがって、ファイルmyReport.xlsを圧縮する場合は、ファイル名をmyReport.xls.gzとする必要があります。解凍時には、最後のファイル拡張子が削除され、元のファイル名になります。それはこのすべてを含むファイルを持っているので、それは年齢のためのUnix/Linuxの中で使用されているか、その方法...

+0

これは問題でしたが、単に拡張子を.zipに置き換えるのではなく単に追加するだけで解決しました。 –

2

実際には非常に奇妙です。簡単な検索は、次のを思い付いた:GZipStreamが書かれているストリームの名前を知る方法がないことを言う、と示唆して

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

は、あなたが直接FileNameプロパティを設定します。

希望に役立ちます。

+0

zipオブジェクトにはNameまたはFileNameプロパティが割り当てられていないため、機能しません。 .NET 3.5と.NET 4で試してみましたが違いはありません:( –

+0

@Davide Pirasしかし、DotNetZipを使用すると、 'AddFile'メソッドがあります - これはファイル名を取得して保存します... GZipはZIPとは異なるものです名前はかなり似ていますが... – Yahia

関連する問題