c# - C# ASP System.IO.Compression - 对多个文件使用 zipArchive.CreateEntryFromFile 时出现未经授权的访问异常()
问题描述
我有以下代码行可用于使用 ZipFile.CreateFromDirectory(selectedFile, zipPath) 创建 zip
if (selectedFolder == string.Empty)
{
Console.WriteLine("Invalid folder, try again");
}
else
{
Console.WriteLine("\nSelect zipfile name: ");
var zipName = Console.ReadLine();
// Also available: extractToDirectory
var zipPath = @"C:\Users\User\Documents\Dev\" + zipName + ".zip";
ZipFile.CreateFromDirectory(selectedFolder, zipPath);
但是,除了将多个文件存档到单个 zip 文件夹中之外,以下代码应该出于所有意图和目的执行相同的操作:
public static void CreateZipFile(string folderToCreateZip, IEnumerable<string> files)
{
var zipPath = folderToCreateZip + "\\test6.zip";
// Create a new ZIP in this location
using (var zip = ZipFile.Open(zipPath, ZipArchiveMode.Create))
{
foreach (var file in files)
{
// Add entry for files
zip.CreateEntryFromFile(file, zipPath, CompressionLevel.Optimal);
}
}
// Dispose of zip object after files have been zipped
//zip.Dispose();
}
var zip == ZipArchive zip
我已经尝试在应该创建 zip 的文件夹上禁用只读模式,但我认为这并不重要,因为使用 CreateFromDirectory() 的先前函数可以正常工作。我也试过在桌面上创建一个 ZIP,但我得到了同样的错误。
这是我得到的例外:
作为一个注释,我注意到尽管有这个错误,它最初确实创建了 zip,只是它不能向它添加任何东西,不像 CreateFromDirectory() 可能是由于文件夹正在使用,没有对该区域的权限或文件夹已经存在。有没有一种方法可以让 CreateEntryFromFile() 正常工作,或者另一种方法可以用于多个文件?
解决方案
我有同样的问题。解决方案是在destinationArchiveFileName 参数中发布完整路径名(以及写入路径)。例如 c:\my apps folder\my app\my temp\zipfile.zip
推荐阅读
- c# - 在 Visual Studio 2013 的 c# 项目中加载 c++ dll 时出错
- go - 主要依赖更新后更新 go 模块导入引用
- excel - 将多个工作表中的数据从其他工作簿复制到当前工作表
- oracle - 必须声明标识符“PIPELINED”
- javascript - 不能做异步功能
- c - c-String 漏洞
- automated-tests - botium 做部分匹配吗?
- python - Pygame Surface.fill() 不起作用,但我的代码没有任何错误
- u-sql - 日期转换期间的 U-SQL 错误
- swift2 - 条件绑定的初始化程序必须具有可选类型,而不是“UInt”