2015-06-09 59 views
0

我有一個.bz2壓縮文件,我想將內部文件複製到另一個位置,而不需要解壓縮。 我使用.net 4.5與C#。C#如何在不提取文件的情況下從bzip2(.bz2)文件獲取文件/複製文件

我想這樣,但是這是一個zip文件(.zip文件):

using (var zip = ZipFile.Read(_targetPathComplete + "\\" + file[0].ToUpper() + "_" + file[1].ToUpper() + ".bz2")) 
{ 
    Stream s = zip[file[0].ToUpper() + "_" + file[1].ToUpper()].OpenReader(); 
    // fiddle with stream here 

    using (var fileStream = File.Create(_targetPathComplete + "\\" + file[0].ToUpper() + "_" + file[1].ToUpper() + ".HDC")) 
    { 
     s.Seek(0, SeekOrigin.Begin); 
     s.CopyTo(fileStream); 
    } 
} 

或壓縮用bzip2算法文件,並給予延長.HDC它。

+0

由於它是一個壓縮文件,如果不先解壓縮,它似乎不太可能從中提取任何內容。也許[這](http://stackoverflow.com/questions/14774401/how-to-list-the-first-or-last-10-lines-from-a-file-without-decompressing-it-in-l )有幫助。 – Melvin

+0

如果你使用winrar手動打開並從那裏複製文件,它還沒有解壓縮,或者它? – Tommek

回答

0

我覺得我解決了這個問題,至少我有智慧這個方法的文件與當我從winrar複製文件相同。

var fname = _targetPathComplete + "\\" + file[0].ToUpper() + "_" + file[1].ToUpper() + ".bz2"; 
using (var fs = File.OpenRead(fname)) 
{ 
    using (var decompressor = new Ionic.BZip2.BZip2InputStream(fs)) 
    { 
     var outFname = _targetPathComplete + "\\" + file[0].ToUpper() + "_" + file[1].ToUpper() + ".HDC"; 
     using (var output = File.Create(outFname)) 
     { 
      var buffer = new byte[2048]; 
      int n; 
      while ((n = decompressor.Read(buffer, 0, buffer.Length)) > 0) 
      { 
       output.Write(buffer, 0, n); 
      } 
     } 
    } 
} 
相關問題