2016-05-25 10 views
0

DeflateStreamは標準の.zipアーカイブとして保存できるアーカイブストリームを作成するはずですか?ファイルからメモリジップを作成する

私は、ローカルファイルから(リモートから送信される)メモリ内のZIPを作成しようとしています。 私は、ローカルディスク上のファイルから圧縮されたバイト配列を取得するためにDeflateStreamを使用:

public static byte[] ZipFile(string csvFullPath) 
    { 
     using (FileStream csvStream = File.Open(csvFullPath, FileMode.Open, FileAccess.Read)) 
     { 
      using (MemoryStream compressStream = new MemoryStream()) 
      { 
       using (DeflateStream deflateStream = new DeflateStream(compressStream, CompressionLevel.Optimal)) 
       { 
        csvStream.CopyTo(deflateStream); 
        deflateStream.Close(); 
        return compressStream.ToArray(); 
       } 
      } 
     } 
    } 

これは素晴らしい作品。私は、zipファイルに結果として得られたバイトをダンプするとき しかし:

byte[] zippedBytes = ZipFile(FileName); 
File.WriteAllBytes("Sample.zip", zippedBytes); 

私は窓がビルドに.zipファイル機能(またはその他のサードパーティ製のアーカイブツールを使用して)と結果の.zipアーカイブを開くことができません。

私はZIPARCHIVEを使用している今、計画しています代替 - しかし、ディスク上の一時ファイルを作成している必要がある(最初に別のディレクトリにファイルをコピーし、そしてその後、それを圧縮バイト配列にそれを読んで、それを削除します)

+2

あなたは 'ZipArchive'クラスを使用する必要があります。ストリームで動作し、一時ファイルは必要ありません。 –

答えて

1

あなたがhttps://dotnetzip.codeplex.com/

この素敵なライブラリを使用するかはZIPARCHIVEを使用することができ、それはMemoryStreamをしてかなり良い作品:

public static byte[] ZipFile(string csvFullPath) 
{ 
    using (FileStream csvStream = File.Open(csvFullPath, FileMode.Open, FileAccess.Read)) 
    { 
     using (MemoryStream zipToCreate = new MemoryStream()) 
     { 
      using (ZipArchive archive = new ZipArchive(zipToCreate, ZipArchiveMode.Create, true)) 
      { 
       ZipArchiveEntry fileEntry = archive.CreateEntry(Path.GetFileName(csvFullPath)); 
       using (var entryStream = fileEntry.Open()) 
       { 
        csvStream.CopyTo(entryStream); 
       } 
      } 

      return zipToCreate.ToArray(); 
     } 
    } 
} 
+0

コードは正常に動作しますが、バイトを.zipファイルにダンプすると、(破損していると思われるアーカイブ)ファイルを開くことはできません。 Btw。そのファイルのバイナリコンテンツは、問題の例で作成されたファイルとほとんど同じです。 – Jan

+1

あなたのコードは正しい方向に私をもたらしましたが、実際にはメモリストリームを使用する前にZipArchiveを処分する必要があります(さらにleaveOpenをtrueに設定する必要があります)。 クレジットはこの回答に属します:http://stackoverflow.com/questions/12347775/ziparchive-creates-invalid-zip-file/12350106#12350106 – Jan

関連する問題