c# 文件用 .gzip 压缩

c# file compress with .gzip

我正在尝试使用 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.

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

谁能帮我解决问题?

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

请看下面的代码。另一个问题可能与硬编码路径有关。文件名为 Input 还是 Input.gz?另请注意堆叠 using 语句以减少嵌套的能力。

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);
    }
}