2013-02-19 124 views
0

我想讀一個剛剛上傳到服務器上的文件,在新創建的文件夾(文件夾名是會話ID)asp.net文件夾的訪問

異常詳細信息:System.UnauthorizedAccessException:訪問 路徑'... \ UploadFiles \ jeiqw1qxya33e3r00idwlceo'被拒絕。

我不知道什麼用戶可以訪問,看網上它說添加應用程序池運行下的身份,這對我來說,看起來在我看來ApplicationPoolIdentity ...但我不能找到這個用戶添加到該文件夾​​的權限。所以我添加了「每個人」並完全控制......只是爲了試驗頭腦,我仍然得到上述錯誤。

這關係到我在這裏的最後一個問題...... StreamReader with tab delimited text file

使用「File.ReadAllLines()」的方法,這是有異常的行。

+0

我會檢查當前分配給該文件夾的權限。同時確保該文件夾繼承權限 – Dreamwalker 2013-02-19 16:29:21

+0

確保將實際文件的權限設置爲Everyone:完全控制(要進行實驗)。 – Syddraf 2013-02-19 16:32:06

回答

0

爲讀取訪問動態創建的文件夾是不實際的 - 正如您所說的文件夾名稱是會話ID。

但是,您可以將文件流式傳輸回像這樣的用戶。

HttpResponse response = HttpContext.Current.Response; 
response.Clear(); 
response.Charset = "utf-8"; 
response.ContentType = "text/xls"; 
response.AddHeader("content-disposition", 
    string.Format("attachment; filename={0}", fileName)); 
response.BinaryWrite(File.ReadAllBytes(filePath)); 
response.End(); 
0

如果您正在運行IIS 7.5或更高版本,您的應用程序池通常運行用戶「IIS應用程序池{池名}」其中{池名稱}是池/站點的名稱。

如果您使用帶應用程序池標識的IIS 7,我認爲它仍然是您的網站運行的「網絡服務」。

順便說一下,你可以直接看到yoru apppool(w3wp.exe)在用戶工具中運行的用戶,比如任務管理器/進程管理器。

0

另一種方法來找出特定帳戶的應用程序運行在代碼:System.Security.Principal.WindowsIdentity.GetCurrent()名稱

但如果你已經給該帳戶,或每個人,全控制和你仍然獲得拒絕訪問錯誤,是否有可能新上傳的文件被鎖定?您是否將上傳的文件保存到虛擬目錄中的某個位置?有時,如果IIS將文件保存到可瀏覽的位置,它可以臨時鎖定該文件。病毒掃描程序有時也會導致文件鎖定。

0

我想感謝大家的迴應。

當我今天早上看了一下代碼用新鮮的眼睛,我發現在我的代碼錯誤...

我有...

var records = File.ReadAllLines(Server.MapPath("~/UploadFiles/") + Session.SessionID).ToList(); 

指向的文件夾,而不是目標文件。

我改......

var records = File.ReadAllLines(Server.MapPath("~/UploadFiles/") + Session.SessionID + "/ediFile.txt").ToList(); 

這就是現在的作品!難怪這讓我困惑,因爲建立的權限是正確的! :)