我正在编写一个简单的桌面应用程序来将文件从一台PC复制到另一台PC。遇到Windows 10重新分析点问题,特别是My Music。我以为只用一行简单的代码就可以了:
ZipFile.CreateFromDirectory(documentsFolder, docSavePath + @"\Documents.zip", CompressionLevel.Optimal, false);
但不是这样,它在My Music文件夹中崩溃了。我也尝试了很多不同的方法,所有这些都有相同的结果 - 拒绝访问。复制和/或压缩Documents文件夹真的很难吗?我对此表示怀疑,我只是遗漏了一些东西。我尝试提升特权,但也没有用。任何人都有一个如何做到这一点的例子?
答案 0 :(得分:0)
我能够弄清楚如何检查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;
}
这比我想跑的时间要长 - 但是看了几天这个问题之后,我很开心它的确有效!