gpt4 book ai didi

c# - ZipFile.CreateFromDirectory 在目录中无法访问某些文件时继续文件的其余部分

转载 作者:太空狗 更新时间:2023-10-30 01:17:15 26 4
gpt4 key购买 nike

ZipFile.CreateFromDirectory(source_dir, target_dir) 将在访问目录中的任何文件时抛出异常并停止压缩。我怎样才能让它对其余文件进行压缩??

不允许终止进程,它们是至关重要的。

谢谢

已解决:

这是我解决这个问题的方法。将任务分为 2 个阶段。

(注意仅使用 System.IO.Compression 中的 Zipfile 和 ZipArchive)

第 1 步。创建一个虚拟 zip 文件; (这个一定不能碰到访问问题)

第 2 步。扫描文件并将其添加到虚拟 zip 文件

附加:通过将文件夹添加到虚拟 zip 文件中来保留原始目录层次结构

这里是第2步,只在遇到异常时复制文件。

        private void UpdateBallFile(String source_dir, String target_zipfile)
{
using (ZipArchive archive = ZipFile.Open(target_zipfile + suffix, ZipArchiveMode.Update))
{
foreach (String subdir in Directory.GetDirectories(source_dir, "*.*", SearchOption.AllDirectories))
{
String relatedPath = subdir.Replace(source_dir, String.Empty);
String entry = relatedPath.Replace("\\", "/").Substring(1);
foreach (String file in Directory.GetFiles(subdir))
{
if (File.Exists(file))
{
FileInfo info = new FileInfo(file);
try
{
archive.CreateEntryFromFile(file, entry+"/"+info.Name);
}
catch
{
try
{
String copied_item = Path.Combine(@"c:\", info.Name);
File.Copy(file, copied_item, true);
archive.CreateEntryFromFile(copied_item, entry + "/" + info.Name);
File.Delete(copied_item);
}
catch (Exception ex)
{
UpdateLog(String.Format("Fails to zip: {0}, {1} ", file, ex.Message));
}
}
}
}
}
}
}

我是 C# 和这个社区的新手,如果您有更好的想法,请告诉我。

谢谢

最佳答案

您可以通过检查可访问性将每个文件添加到您的 zip,因此您可以这样编码:

ZipFile myzip = new ZipFile("myzipFile");
foreach (string file in Directory.GetFiles(@"D:\sample"))
{
try
{
var stream = File.Open(file, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
stream.Dispose();
myzip.AddFile(file);// add file to zip only if it is accessible. else it will throw some exception
//hence it wont added to the zipped folder.
}
catch
{ }
}
myzip.Save(@"D:\sample\myfile.zip");// this zip file contains only file that have access

希望这就是您所看到的;

关于c# - ZipFile.CreateFromDirectory 在目录中无法访问某些文件时继续文件的其余部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32523451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com