2011-10-01 68 views
3

我有一個MVC應用程序,用戶可以在其中上傳文件。在我編寫上傳的文件之前,我根據日期時間創建了一個目錄。我從C:\ ApplicationName開始,並在上傳完成時(理論上)以C:\ ApplicationName \ 20111001 \ Filename.ext結尾。C#MVC嘗試寫入文件時訪問路徑被拒絕

我的本地Windows 7機器上的問題是我無法寫入文件。無論哪個用戶我完全訪問該目錄,我都會收到「拒絕訪問」異常。奇怪的是日期目錄被創建得很好。

我已經給出了以下用戶完全訪問:

  • [當前登錄的用戶]
  • NETWORK SERVICE
  • IUSR
  • IIS_IUSRS
  • 客人
  • 大家

沒有任何成功。我真的不明白這裏發生了什麼。當我給每個人完全訪問權限時,我應該能夠創建一個文件嗎? PS:我直接使用Visual Studio 2010和ASP.NET開發服務器。

+0

我認爲你使用MVC的事實不是問題的一部分。不確定(我對MS Web服務器權限瞭解不多),但您可能還需要設置應用程序的信任級別。當您部署到IIS時,您需要檢查您的應用程序池以查看您的代碼運行的是哪個用戶。 –

+0

發佈寫入文件的代碼行,文件名的確切值(首先嚐試使用@「C:\ ApplicationName \ 20111001 \ Filename.ext」的合併值)和異常信息。否則應該工作,因爲你可以創建文件夾。 –

+0

我已經完成了你所說的: System.IO.File.WriteAllBytes(@「C:\ ApplicationName \ 20111001 \ Filename.ext」,new byte [1] {0}); 但仍然得到異常,「訪問路徑'C:\ ApplicationName \ 20111001'被拒絕」 – TheGuest

回答

1

我沒有運行IIS,我正在運行淡化版本「ASP.NET Development Server」。所以我非常有限

問題是,爲了讓您從應用程序寫入文件目錄,您需要以管理員身份運行Visual Studio。

Windows 7阻止該進程超出其沙箱,因爲它使用有限權限運行。即使您的帳戶是管理員,情況也是如此。

1

檢查父文件夾的權限並確保它們是可繼承的,您可以在高級選項窗口中選中此項。

+0

我已經嘗試過,但我仍然得到「拒絕訪問」異常。 – TheGuest

+2

比發佈更多信息。 –

0

剛剛有同樣的問題我自己。默認情況下,IIS7 AppPools使用AppPoolIdentity。只需在IIS管理控制檯中打開您的AppPools,選擇您遇到問題的那個,選擇高級設置,然後在過程模型將Indentity更改爲內置Acoount>NetworkService。 由於您已將網絡服務訪問權限授予您的文件夾,因此所有內容均應有效。

+0

我沒有運行IIS,我正在運行淡化版「ASP.NET開發服務器」。所以我非常有限。 – TheGuest