2012-01-11 392 views
85

我有一個問題,我試圖刪除我的文件,但我得到一個異常。爲什麼訪問路徑被拒絕?

if (result == "Success") 
{ 
    if (FileUpload.HasFile) 
    { 
     try 
     { 
       File.Delete(Request.PhysicalApplicationPath + app_settings.login_images + txtUploadStatus.Text); 
       string filename = Path.GetFileName(btnFileUpload.FileName); 
       btnFileUpload.SaveAs(Request.PhysicalApplicationPath + app_settings.login_images + filename); 
     } 
     catch (Exception ex) 
     { 
       Message(ex.ToString()); 
     } 
     } 
} 

另外我應該注意,我試圖刪除的文件夾已完全控制網絡服務。

完整異常消息爲:

System.UnauthorizedAccessException:對路徑 'C:\用戶\ gowdyn \文件\的Visual Studio 2008 \項目\混合\混合\ temp_loginimages \ enviromental.jpg'被拒絕。 System.IO .__中的System.IO.__錯誤.WinIOError(Int32錯誤代碼,字符串maybeFullPath)在System.IO.File.Delete(字符串路徑)在hybrid.User_Controls.Imgloader_Add_Edit_Tbl.btnUpdate_Click(對象發件人,EventArgs e)在C:\ Users \ gowdyn \ Documents \ Visual Studio 2008 \ Projects \ hybrid \ hybrid \ User_Controls \ Imgloader_Add_Edit_Tbl.ascx.cs:line 242

任何想法?

+4

什麼是不明確的例外?應用程序正在運行的帳戶對該文件/文件夾沒有訪問權限。 – Oded 2012-01-11 15:01:12

+3

我瞭解異常情況。問題是這個功能被一些需要使用系統修改圖像的用戶使用。部分原因是通過刪除舊圖像並保存新圖像來替換圖像。 – 2012-01-11 15:25:55

+0

檢查您對該文件夾的訪問權限。 使用屬性窗口中的安全選項卡給予文件夾的適當權限 – gasroot 2013-05-23 17:01:40

回答

1

您需要修改您嘗試從/保存到的文件夾的權限。右鍵單擊包含的文件夾並使用「安全」選項卡爲您的應用程序運行所在的用戶授予修改權限。

+0

你假設他是他的機器的管理員..如果這是一臺工作機器,他只是一個用戶..他們可能會設置權限的方式有原因..因爲我們只是假設 – MethodMan 2012-01-11 15:06:52

+1

這是一個工作機器和我是一個權力用戶。我不以管理員身份登錄。圖像文件夾的屬性已被修改,因此網絡服務具有完全訪問權限。但是這沒有什麼區別。 – 2012-01-11 15:24:18

+0

我剛剛添加了「所有人」,完全訪問該文件夾,「voilá」 – MarceloBarbosa 2017-01-17 13:45:06

14

當用戶嘗試連接到您的網站時,IIS將連接分配給IUSER_ComputerName帳戶,其中ComputerName是運行IIS的服務器的名稱。默認情況下,IUSER_ComputerName帳戶是Guests組的成員。這個小組有安全限制。嘗試盛大訪問IUSER_ComputerName該文件夾

Here是有關IIS安全性很好的描述答案

希望這有助於

+0

這是節省我的時間。 :) – nirupam 2017-09-21 04:16:35

0

我也面臨着試圖在服務器部署後,要做到這一點,當同樣的問題:

dirPath = Server.MapPath(".") + "\\website\\" + strUserName; 
if (!Directory.Exists(dirPath)) 
{ 
    DirectoryInfo DI = Directory.CreateDirectory(dirPath); 
} 
string filePath = Server.MapPath(".") + "\\Website\\default.aspx"; 
File.Copy(filePath, dirPath + "\\default.aspx", true); 
File.SetAttributes(dirPath + "\\default.aspx", FileAttributes.Normal); 

我將IIS的權限授予其他組,包括管理員和我的問題得到解決。

3

由於I/O錯誤或特定類型的安全錯誤,操作系統拒絕訪問 時引發的異常。

我碰到同樣的事情。檢查以確保該文件不被隱藏。

138

我也有這個問題,所以我在這篇文章中磕磕絆絆。我在複製/刪除之前和之後添加了以下代碼行。

刪除

File.SetAttributes(file, FileAttributes.Normal); 
File.Delete(file); 

複製

File.Copy(file, dest, true); 
File.SetAttributes(dest, FileAttributes.Normal); 
+9

我給了'每個人'的文件夾沒有成功的完全權限。不知何故,這些文件屬性雖然工作。謝謝。我希望MS最終能夠建立一個適當的安全模式。試圖找出爲什麼複製/刪除每隔幾年爆炸至少令人沮喪。 – Steve 2013-01-07 21:43:15

+8

SetAttributes正常是我的詭計 - 我試圖File.Copy並覆蓋只讀文件。 – 2013-02-28 16:51:34

+3

+1!我用'臨時',這似乎也適用於我。 – christiandev 2013-10-10 11:44:57

1

我有同樣的問題在共享服務器上的新移動網站上。通過Web主機面板(DotNetPanel)解決設置爲「允許寫入權限」。因此,如果您在查看所有代碼後查看服務器配置,並且可以爲您節省大量時間,那麼如果您在共享服務器中。

1

請注意,如果您嘗試從代碼中訪問共享文件夾路徑,則不需要通過安全選項卡授予物理文件夾的適當權限。您還需要通過Share選項卡與相應的應用程序池用戶「共享」文件夾

19

這是一個老問題,但我在搜索時遇到了這個問題。原來,我錯過了在另存爲保存路徑的實際文件名部分...

string uploadPath = Server.MapPath("~/uploads"); 
file.SaveAs(uploadPath); // BAD 
file.SaveAs(Path.Combine(uploadPath, file.FileName)); // GOOD 
+0

與我的這個答案,我也得到訪問被拒絕的錯誤,你可以幫助https://stackoverflow.com/questions/49187909/storing-file-by-creating-datefolders-and-saving-inside-it – BNN 2018-03-09 09:26:59

0

我發現可以,而不是在設計模式下會出現這個錯誤?執行模式... 如果您正在做某些事情,例如創建需要訪問.INI或.HTM文件(配置文件,幫助文件)的類成員,則可能不希望在聲明中初始化該項目,而是初始化它後來的Form_Load()等等...... 當你做初始化...使用保護IF語句:

/// <summary>FORM: BasicApp - Load</summary> 
    private void BasicApp_Load(object sender, EventArgs e) 
    { 
     // Setup Main Form Caption with App Name and Config Control Info 
     if (!DesignMode) 
     { 
      m_Globals = new Globals(); 
      Text = TGG.GetApplicationConfigInfo(); 
     } 
    } 

這將保持MSVS設計師從嘗試,當你在設計,創造一個INI或HTM文件模式。

1

檢查您的文件屬性。如果只讀被選中,取消選中它。這是我的UnauthorizedAccessException個人問題。

79

根據File.Delete Method ...

UnauthorizedAccessException意味着4兩件事:

  • 調用方沒有所要求的權限。
  • 該文件是一個正在使用的可執行文件。
  • Path是一個目錄。
  • 路徑指定一個只讀文件。
+17

路徑是一個目錄。尷尬的我:/ – 2017-03-08 09:10:23

+0

昨天發生在我身上* facepalm *。我討厭這個ambigous例外消息:( – 2017-03-24 15:18:18

+0

我一直在努力超過6小時,並在看到你的迴應後,看到該路徑是目錄...感謝噸@CrazyTim .. – 2017-11-29 00:59:50

5

如果這是一個有問題的IIS網站,請檢查網站或應用程序使用的應用程序池的高級設置的Identity屬性。您可能會發現它已設置爲ApplicationPoolIdentity,在這種情況下,這是必須有權訪問該路徑的用戶。

或者你也可以過時並簡單地將身份設置爲網絡服務,並讓網絡服務用戶訪問路徑。

0

當我嘗試在移動或創建後非常快速地重命名文件夾時,出現此錯誤。

一個簡單的System.Threading.Thread.Sleep(500);解決它:

void RenameFile(string from, string to) 
{ 
    try 
    { 
     System.IO.File.Move(from, to)  
    } 
    catch 
    { 
     System.Threading.Thread.Sleep(500);  
     RenameFile(from, to);  
    } 
} 
+0

認爲如果您在移動文件夾之前檢查文件夾是否存在,而不是睡眠半秒鐘會更好......如果操作系統繁忙,則先前的移動可能需要半秒多的時間,而您回到相同的問題。 – 2016-06-10 13:28:46

+0

這段代碼非常危險。無論拋出什麼異常,它都會重複RenameFile方法!如果異常的原因是一個實際的許可問題,它可能會導致應用程序崩潰 – 2016-06-19 05:42:50

5

右鍵單擊Visual Studio和點擊以管理員身份運行

+0

這是我在本地管理員的Windows 8.1企業計算機上針對我的File.Move問題的解決方案,並且沒有其他任何文件處理該文件。 – 2016-05-16 21:25:04

5

我得到的錯誤,因爲我不知道,DEST應該是一個文件。我有一個文件夾作爲第二個參數(它在cmd中工作)。我得到了Unhandled Exception: System.UnauthorizedAccessException: Access to the path is denied.因爲c#文件。Move需要一個文件,不僅僅是第一個參數,而是第二個參數,所以如果你把一個目錄作爲第二個參數,當你有一個名爲c:\crp的目錄時,它試圖寫一個像c:\crp這樣的文件。

這將是不正確File.Move(args[0],"c:\\crp");

所以,這將是正確File.Move(args[0],"c:\\crp\\a.a");

這同樣適用於File.Copy

+0

謝謝!這間接地解決了一個問題,即一個API期望我提供的目錄作爲目錄,而不是意識到它必須包含文件名(因爲對象本身有一個關聯的文件名)。 – Salgat 2017-10-05 18:29:35

0

我得到這個錯誤並解決它在短短的時刻。不知道爲什麼我的所有文件夾都是隻讀的,我取消了只讀並應用它。但是,它仍然是隻讀的。所以我將文件移動到根文件夾中,它工作 - 很奇怪。

0

我面臨這個錯誤,因爲

有時,當我Combine路徑文件名FileName = ""

它成爲Path Directory不是file這是一個問題,因爲mentioned above

所以您必須檢查FileName這樣的

if(itemUri!="") 
     File.Delete(Path.Combine(RemoteDirectoryPath, itemUri));