我能弄清楚如何檢查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驅動器。或者用戶選擇的任何位置。 –