2010-10-06 236 views
1

我在刪除目錄時遇到了一些麻煩。我正在構建一個ADMIN工具來刪除我的客戶創建的目錄,然後要求刪除它們。你會認爲這很簡單:刪除目錄

 

using (var context = Impersonator.LogOn(user, password, domain)) 
{ 
    try 
    { 
     dir = new DirectoryInfo(path); 
     dir.Delete(true); 
    } 
    catch (Exception ex) 
    { 
     return string.Format("Error:{0}", ex.Message); 
    } 
    finally 
    { 
     context.Undo(); 
    } 
} 
 

現在無論我做什麼我都不能刪除該文件夾。響應一直在「拒絕訪問路徑」。我已經加倍檢查路徑,登錄一切。

請告訴我我做錯了什麼。

服務器:WIN2008網絡版 ASP.NET:4

回答

1

我最近通過刪除文件夾中的所有文件,然後刪除文件夾,最初解決了這個相同的問題

對我來說,關於訪問的錯誤信息是誤導性的。

有時我在Windows資源管理器中刪除文件時也遇到此問題。偶爾,它會刪除目錄,直到刪除其中的文件爲止。我從來沒有想過爲什麼。

這裏是我的代碼:

private static void FileCleanup(string directoryName) 
{ 
    try 
    { 
     string[] filenames = Directory.GetFiles(directoryName); 

     foreach (string filename in filenames) 
     { 
      File.Delete(filename); 
     } 

     if (Directory.Exists(directoryName)) 
     { 
      Directory.Delete(directoryName); 
     } 
    } 
    catch (Exception ex) 
    { 
     // you might want to log it, or swallow any exceptions here 
    } 
} 
+0

那樣我的想法也是。但是現在我得到的訪問路徑'index.asp'被拒絕。 – Kramer 2010-10-06 16:28:49

+0

你正試圖刪除一個網頁? – DOK 2010-10-06 17:01:09

+0

是的,圖像爲什麼現在? – Kramer 2010-10-06 17:17:13

0

錯誤消息說,這一切。 「的路徑訪問被拒絕」 - >也許你正在運行沒有權限的文件夾的過程

編輯:或者一些文件正在使用...

+0

是的,我已經將應用程序池設置爲NetworkService,我的管理員帳戶似乎都不起作用。 – Kramer 2010-10-06 16:20:18

0

也許代碼示例here將指向你在正確的方向。您需要在模擬環境下運行才能以該用戶的身份執行操作。

+0

是的,我正在那樣做。該代碼是Impersonator.LogOn。 – Kramer 2010-10-06 16:26:06

0

你知道,我會擺脫追趕通用的SystemException的,而是趕上一些Delete方法將拋出具體異常。它可能有助於調試這樣的問題。

+0

這是我仍然是新手的地方,我如何獲得更多信息? – Kramer 2010-10-06 17:01:28

0

原諒我,如果你這樣做了,但是:

1)你可以測試你使用刪除使用單元測試目錄的方法?確保使用測試在計算機上本地運行刪除代碼。

2)您可能會被拒絕的原因是因爲這些文件正在使用中。如果以前的某篇文章中的index.asp文件是由IIS啓動的,那麼它仍然可以被使用,因此不想被刪除。如果IIS有它的手在你的文件上,那麼你需要停止IIS服務或等到它被釋放。

3)文件是否只讀?

4)確保您使用的是物理路徑,而不是隻有IIS可以理解的相對路徑。刪除文件/目錄不會理解虛擬目錄。

ON另一個說明......爲什麼不在數據庫中引用這些文件,並進行軟刪除?看到它的網頁,用戶將無法辨別。讓數據庫告訴應用程序允許你查看哪些文件。這樣數據丟失的可能性很小。

+0

是的,它確實在我的桌面上工作,而不是從服務器上工作。那麼這是對apppool的權限問題?如果是的話,我在哪裏改變它? – Kramer 2010-10-06 17:25:31