我能弄清楚如何检查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;
}
这需要比我想运行更长的时间 - 但在看了这个dang问题几天之后,我很高兴它的工作原理!
doc保存路径在哪里试图保存文件? –
到USB驱动器。或者用户选择的任何位置。 –