2011-01-25 108 views
0

我試圖保存一個文件,我從郵箱下載。這種處理不當出現過什麼問題,但現在我心中已經在我的潛行內置的GUI我得到和授權例外:C#IO異常

Saved file: C:\TempNorlander 
System.UnauthorizedAccessException: Access to the path 'C:\TempNorlander' is denied. 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) 
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy) 
    at System.IO.FileStream..ctor(String path, FileMode mode) 
    at a.a0.b(String A_0, Byte[] A_1, Int32 A_2, Int32 A_3) 
    at MailBee.Mime.Attachment.Save(String filename, Boolean overwrite) 
    at Mail2DB.Connect2Exchange.CollectData() in C:\Users\marthin\documents\visual studio 2010\Projects\Mail2DB\Mail2DB\Connect2Exchange.cs:line 210 

我無法弄清楚的問題是在這裏。在文件夾iv中,所有可能的用戶都擁有所有的特權。

編輯:

我忘了提,現在用GUI我在一個簡單的文本框中輸入FOLDERPATH。 (通過的FolderBrowserDialog)

第二個編輯:

進出口運行過程中出現這對Windows 7和2010年VS THX 任何幫助! /Marthin

+0

這是什麼樣的GUI? – BrokenGlass 2011-01-25 20:44:58

+0

它是一個Windows應用程序,用戶在那裏填寫連接信息到交換服務器,並將包含一些和csv文件的郵件下載並解析到數據庫中。 – Marthin 2011-01-25 20:51:22

回答

1

保存的文件:C:\ TempNorlander

您試圖保存具有相同名稱的文件夾中的文件。這是不允許的,UnauthorizedAccessException是結果。修復文件名稱,例如C:\ TempNorlander \ mumble.txt

1

的錯誤是很清楚的:

訪問路徑 'C:\ TempNorlander' 被拒絕。

運行此過程的用戶沒有訪問此文件夾的權限。

要麼給這個用戶正確的權限,要麼使用已經擁有它們的用戶啓動程序。

1

假設這是一個web項目 - 默認情況下,您的項目將在IIS DefaultAppPool下運行,該權限無權讀取HD上的任意文件。您可以通過

  1. 解決這個問題特別允許的程序池 訪問該文件夾/文件在資源管理器中
  2. 加入 權利
  3. 使用impersonation讀取文件 根據不同 用戶的憑據
  4. 通過創建 另一個應用程序池或changing the identity現有的應用程序在IIS中爲您的 應用程序使用不同的標識。

如果您的GUI不是Web項目第2點仍然適用 - 您需要模擬具有文件夾/文件讀權限的用戶或將這些權限添加到您的應用程序正在運行的用戶。

+0

這是一個Windows應用程序。 – Marthin 2011-01-25 20:49:00

0

可能的原因:

  1. 你不能真正的C語言創建一個文件:(其中,順便說一句,你不應該)
  2. 您已經有打開文件在任何其他進程或在您的應用程序
  3. 您正在試圖覆蓋現有文件,無法

也許你想解決你真的是在努力完成任務。 例如,將一些數據保存到可在同一會話中訪問的臨時文件中。或者附加到可以在以後的調用中訪問的ASP.NET應用程序的持久數據文件。

例如,如果這是一個桌面應用程序,你需要創建一個用於保存數據的臨時文件,你想使用Path.GetTempFileName了點。