2013-07-31 35 views
1
拉鍊轉換幫助

我使用這個代碼文件的壓縮來壓縮需要使用Gstream

 public static void Compress(FileInfo fileToCompress) 
    { 
     using (FileStream originalFileStream = fileToCompress.OpenRead()) 
     { 
      if ((File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".zip") 
      { 
       using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + "_" + DateTime.Now.ToString("dd_MM_yyyy") + ".zip")) 
       { 

        using (GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress)) 
        { 
         originalFileStream.CopyTo(compressedFileStream); 
         Console.WriteLine("Compressed {0} from {1} to {2} bytes.", 
          fileToCompress.Name, fileToCompress.Length.ToString(), compressedFileStream.Length.ToString()); 
        } 
       } 
      } 
     } 
    } 

與此代碼我將文件轉換爲壓縮 ,比如我有文件,名稱myfile.pdf 什麼的確,它保存此文件與myfile.pdf_31_7_2013.zip 但問題是,當我解壓這個zip它包含我的extention myfile.pdf_31_7_2013文件堂妹及其延伸從.PDF改爲.pdf_31_7_2013

這將是invaild文件

所以它的擴展改變了。我想修改代碼的方式是,zip名稱應該與現在執行的 相同。但裏面,我的文件應該只與myfile.pdf

請幫我解決這個問題。在此先感謝

+1

第一個問題:一個GZipStream不是一個zip文件,所以不應該被稱爲一個zip文件。至於其餘 - 這是你的命名方案......你應該調整它到任何你想要的。例如,你可以把日期*放在*擴展名之前,而不是之後...... –

+0

@Jon:使這個答案... mer正在創建一個gzip文件,並且 - 默認情況下 - gzip提取自動刪除擴展名(正確「.gz」),留下描述的文件名。 – eFloh

回答

2

您應該更改文件的格式,以便:

  • 擴展名是gz
  • 的部分前的擴展名是適合您的文件,這樣當.gz已被刪除,這將是一個合理的文件名。

因此,而不是轉換成myfile.pdfmyfile.pdf_31_7_2013.zip,我想它轉換成myfile-20130731.pdf.gz。當它被提取時,它將變成myfile-20130731.pdf。請注意,使用yyyyMMddMM_d_yyyy更清潔,因爲它是可排序和明確的。

+0

可以請你描述一下這樣工作的代碼嗎? –