【问题标题】:System.IO.Compression.ZipFile UnauthorizedAccessExceptionSystem.IO.Compression.ZipFile UnauthorizedAccessException
【发布时间】:2012-10-08 23:38:54
【问题描述】:

我正在尝试使用 .NET 4.5 ZipFile 类和 CreateFromDirectory(string, string) 方法备份一些文件。我收到 UnauthorizedAccessException - 拒绝访问。我可以成功读取该目录中的所有文件并将文件写入该目录。所以我认为权限设置正确。关于我在 ZipFile 类上的访问被拒绝的原因有什么想法吗?

static void Main(string[] args)
{
    string backupLocation = @"C:\Backups";
    string directoriesToBackup = @"F:\myMedia\myPictures\Our Family\2012\Misc";

    try
    {
        ZipFile.CreateFromDirectory(directoriesToBackup, backupLocation);
    }
    catch (System.UnauthorizedAccessException e) 
    {
        Console.WriteLine(e.Message);
    }

    DirectoryInfo di = new DirectoryInfo(@"F:\myMedia\myPictures\Our Family\2012\Misc");
    File.Create(@"F:\myMedia\myPictures\Our Family\2012\Misc\testCreateFromVs.txt");
    foreach (FileInfo i in di.GetFiles())
    {
        Console.WriteLine(i.Name);
    }

    Console.ReadKey();

}

【问题讨论】:

    标签: .net zipfile


    【解决方案1】:

    你好像误会了什么。

    backupLocation = @"C:\Backups";
    

    您想用 文件 覆盖 目录 "C:\Backups" !这是不允许的! ;-)(拒绝访问)

    您必须使用文件名指定路径。
    语法:CreateFromDirectory(string,string)

    public static void CreateFromDirectory(
        string sourceDirectoryName,
        string destinationArchiveFileName
    )
    

    例子:

     string startPath = @"c:\example\start";
     string zipPath = @"c:\example\result.zip";
     ZipFile.CreateFromDirectory(startPath, zipPath);
     [...]
    

    【讨论】:

    • 你说得对!我不敢相信我忽略了这一点。感谢您的帮助。
    • 这可能会在匆忙中发生;-)
    • 有趣的是,出于完全相同的原因得到了完全相同的错误......所以如果它可以安慰你,你并不孤单我的朋友 :-D
    【解决方案2】:

    在我的例子中,我在开始压缩文件之前尝试创建目标目录,但是将目标目录创建为 zip 文件的名称,所以因为空的 zip 文件已经存在(作为目录) ,我得到了同样的错误。

    【讨论】:

      【解决方案3】:

      当与(输出)zip 同名的文件夹已经存在时,也会出现问题

      【讨论】:

        【解决方案4】:

        在我的例子中,我正在使用 Unity,我手动将 System.IO.Compression.dll 和 System.IO.Compression.ZipFile.dll(以及相关的 XML)添加到 Assets 文件夹中。

        但我选择了一个 SDK 版本错误的 DLL,虽然它在 MacO 上运行良好,但在 Android 和 iOS 上却出现了 UnauthorizedAccessException。

        我通过删除 dll 和 XML 并关注 Unity Forum 上的线程解决了这个问题。

        基本上你必须确保你的项目 Api Compatibility Level 和 dll .Net 版本匹配。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多