使用 System.IO.Compression 压缩 Windows 10 Documents 文件夹,不包括重解析点
Posted
技术标签:
【中文标题】使用 System.IO.Compression 压缩 Windows 10 Documents 文件夹,不包括重解析点【英文标题】:Zip Windows 10 Documents folder without including reparse points using System.IO.Compression 【发布时间】:2018-02-28 14:01:17 【问题描述】:我正在编写一个简单的桌面应用程序来将文件从一台 PC 复制到另一台 PC。 Windows 10 重新分析点有问题,特别是我的音乐。我以为只需要一行简单的代码就可以逃脱:
ZipFile.CreateFromDirectory(documentsFolder, docSavePath + @"\Documents.zip", CompressionLevel.Optimal, false);
但并非如此,它会在“我的音乐”文件夹中崩溃。我也尝试了很多不同的方法,结果都是一样的——访问被拒绝。复制和/或压缩 Documents 文件夹真的这么难吗?我对此表示怀疑,我只是错过了一些东西。我尝试提升权限,但也没有用。任何人都有如何做到这一点的例子?
【问题讨论】:
试图保存文件的文档保存路径在哪里? 到 USB 驱动器。或者用户选择的任何位置。 【参考方案1】:我能够弄清楚如何检查 ReparsePoint 属性,这相对容易,但随后必须拼凑出如何遍历所有文件并将它们添加到 ZipArchive。 RecurseDirectory 的功劳归于this answer。
然后我添加了我学到的关于重解析文件属性的内容。
private void documentBackup(string docSavePath)
if (File.Exists(docSavePath + @"\Documents.zip")) File.Delete(docSavePath + @"\Documents.zip");
using (ZipArchive docZip = ZipFile.Open(docSavePath + "\\Documents.zip", ZipArchiveMode.Create))
foreach (FileInfo goodFile in RecurseDirectory(documentsFolder))
var destination = Path.Combine(goodFile.DirectoryName, goodFile.Name).Substring(documentsFolder.ToString().Length + 1);
docZip.CreateEntryFromFile(Path.Combine(goodFile.Directory.ToString(), goodFile.Name), destination);
public IEnumerable<FileInfo> RecurseDirectory(string path, List<FileInfo> currentData = null)
if (currentData == null)
currentData = new List<FileInfo>();
var directory = new DirectoryInfo(path);
foreach (var file in directory.GetFiles())
currentData.Add(file);
foreach (var d in directory.GetDirectories())
if ((d.Attributes & FileAttributes.ReparsePoint) == FileAttributes.ReparsePoint)
continue;
else
RecurseDirectory(d.FullName, currentData);
return currentData;
它需要的时间比我想运行的要长 - 但是在看了几天这个该死的问题之后,我很高兴它可以工作!
【讨论】:
以上是关于使用 System.IO.Compression 压缩 Windows 10 Documents 文件夹,不包括重解析点的主要内容,如果未能解决你的问题,请参考以下文章
使用 vb.net 和 System.IO.Compression (.Net 4.5) 压缩文件
我没有在“System.IO.Compression”命名空间中找到“ZipFile”类
System.IO.Compression.ZipFile.CreateFromDirectory - 在 Mac 上打开时没有文件夹结构
使用 System.IO.Compression 压缩 Windows 10 Documents 文件夹,不包括重解析点