2017-09-19 24 views
1

我正在寫一個簡單的桌面應用程序,以將文件從一臺PC複製到另一臺。無法使用Windows 10重新分析點,特別是我的音樂。我以爲會用一行簡單的代碼逃脫:Zip Windows 10文檔文件夾,不包括使用System.IO.Compression重新分析點

ZipFile.CreateFromDirectory(documentsFolder, docSavePath + @"\Documents.zip", CompressionLevel.Optimal, false); 

但並非如此,它在My Music文件夾中崩潰。我也嘗試了很多不同的方式來做到這一點,所有結果都一樣 - 訪問被拒絕。可以複製和/或壓縮Documents文件夾真的很難嗎?我懷疑它,我只是想念一些東西。我嘗試提升特權,但也沒有奏效。任何人都有一個如何做到這一點的例子?

+0

doc保存路徑在哪裏試圖保存文件? –

+0

到USB驅動器。或者用戶選擇的任何位置。 –

回答

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; 
    } 

這需要比我想運行更長的時間 - 但在看了這個dang問題幾天之後,我很高興它的工作原理!