14

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

}
4

4 回答 4

23

看来你误会了什么。

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);
 [...]
于 2012-10-18T14:03:04.717 回答
2

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

于 2014-05-30T12:58:53.260 回答
2

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

于 2017-04-14T12:43:44.093 回答
0

就我而言,我正在使用 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 版本匹配。

于 2022-01-21T10:58:40.467 回答