2015-09-25 76 views
1

我有这个简单的例子(从MSDN文档复制),但.GZ文件得到从未创建...C#GZipStream压缩不写入文件

我试图添加一个调用compressedFileStream.Flush( );但没有......

static string directoryPath = @"C:\\temp\\"; 
... 
public string CompressFile(FileInfo fileToCompress) 
{ 
    try 
    { 
     using (FileStream originalFileStream = fileToCompress.OpenRead()) 
     { 
      if ((File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz") 
      { 
       using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz")) 
       using (GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress)) 
       { 
        originalFileStream.CopyTo(compressionStream); 
        compressedFileStream.Flush(); 

        FileInfo info = new FileInfo(directoryPath + "\\" + fileToCompress.Name + ".gz"); 

        return String.Format("Compressed {0} from {1} to {2} bytes.", fileToCompress.Name, fileToCompress.Length.ToString(), info.Length.ToString()); 
       } 
      } 
      return "File yet compressed."; 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); 
    } 

    return ""; 
} 
+1

为什么你有一个'&'在'FileAttributes.Hidden&fileToCompress.Extension!= “广州”',而不是''&&? –

+0

@ spiderman77你还有问题吗? –

回答

1

你的代码工作正常。我只是跑它,我通过文件的名称,我得到gzipped文件。请记住,您的gz文件将在原始文件的相同的目录中创建。我看到你有directoryPath变量,并且你正在使用它来读取有关新创建文件的信息。确保directoryPath和您传递的文件位于同一个目录中。一种做法是在调用函数时使用directoryPath变量。例如

var result = CompressFile(new FileInfo(directoryPath + "FileToCompress.txt")); 

我结果返回为:从10920到10字节

压缩FileToCompress.txt。