c#文件使用.gzip压缩

时间:2017-01-10 19:39:13

标签: c# zip gzip gzipstream

我正在尝试使用GZIP压缩文件,我的应用程序监视文件夹中的新文件。当一个新文件进来时,它应该被压缩,然后应用程序应该在每次新文件进入文件夹时继续这样做。

private void Compress(string filePath)
    {

      using (FileStream inputStream = new FileStream(filePath,FileMode.OpenOrCreate,FileAccess.ReadWrite))
        {
            using (FileStream outputStream = new FileStream(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"C:\\Users\\maki\\Desktop\\Input"), FileMode.OpenOrCreate, FileAccess.ReadWrite))//'System.UnauthorizedAccessException' 
            {
                using (GZipStream gzip = new GZipStream(outputStream, CompressionMode.Compress))
                {
                    inputStream.CopyTo(gzip);
                }
            }
        }


    }

当我执行应用程序时,我得到了这个例外:

An unhandled exception of type 'System.UnauthorizedAccessException' occurred in mscorlib.dll

其他信息:

Access to the path 'C:\Users\maki\Desktop\Input' is denied.

我在互联网上搜索过很多但找不到合适的答案。

任何人都可以帮我解决问题吗?

1 个答案:

答案 0 :(得分:0)

问题可能与您实例化文件流的方式有关。在您的代码中,您将路径与Path.Combine方法与另一个完全限定的路径组合在一起。

请参阅下面的代码。另一个问题可能与硬编码路径有关。该文件名为Input或Input.gz吗?还要注意使用语句堆叠以减少嵌套的能力。

private void Compress(string filePath)
{
    using (FileStream inputStream = 
        new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
    using (FileStream outputStream =
        new FileStream(@"C:\\Users\\maki\\Desktop\\Input",
            FileMode.OpenOrCreate, FileAccess.ReadWrite)) 
    using (GZipStream gzip = new GZipStream(outputStream, CompressionMode.Compress))
    {
        inputStream.CopyTo(gzip);
    }
}