2009-12-30 43 views
2

我在應用程序中使用SharpSvn庫。作爲我的自動化集成測試的一部分,我創建了測試存儲庫,檢出工作副本,執行一些測試,然後刪除存儲庫和工作副本文件夾。無法以編程方式刪除SVN工作副本

但是,一個簡單的Directory.Delete(workingCopyPath, true);始終得到消息「訪問路徑‘項’被拒絕。」的UnauthorizedAccessException。我可以重現錯誤與此代碼:

 using (var svnClient = new SvnClient()) 
    { 
     svnClient.CheckOut(
      new SvnUriTarget(new Uri(repositoryPath)), workingCopyPath); 
    } 
    Directory.Delete(workingCopyPath, true); 

此錯誤仍然存​​在,如果我

  • 嘗試通過集成的以前運行刪除創建 工作副本 測試
  • Thread.Sleep前幾秒 試圖刪除

如果我使用資源管理器手動刪除臨時工作副本,我不會收到任何錯誤。

這裏怎麼回事?以編程方式刪除Subversion工作副本的正確方法是什麼?

+0

可能是你的集成自動化測試過程中的一個已經其當前目錄設置爲一個目錄的工作副本中,或仍在使用拷貝一個文件。 – 2009-12-30 20:16:47

+0

不,這就是爲什麼我提到我也不能刪除由* previous * run創建的工作副本。上一次運行的進程不再運行,所以我會說它不能保持任何資源鎖定。 – 2009-12-30 20:19:32

回答

6

變爲Directory.Delete拒絕刪除只讀文件。

我現在用這個方法來刪除目錄:

private void DeleteDirectory(string path) 
{ 
    var directory = new DirectoryInfo(path); 
    DisableReadOnly(directory); 
    directory.Delete(true); 
} 

private void DisableReadOnly(DirectoryInfo directory) 
{ 
    foreach (var file in directory.GetFiles()) 
    { 
     if (file.IsReadOnly) 
     file.IsReadOnly = false; 
    } 
    foreach (var subdirectory in directory.GetDirectories()) 
    { 
     DisableReadOnly(subdirectory); 
    } 
} 
+0

這種方式應該工作得很好耶。順便說一句,你應該能夠接受你自己的答案。 – 2010-01-01 21:03:54