2011-06-15 107 views
4

我有一個需要讀取文本文件並解析它們的C#.Net 4.0項目 - 非常簡單。無法從C: Testing Docs中讀取txt文件使用C#.Net

該文件位於C:\測試\文檔

當我嘗試在上面的目錄我碰到下面的錯誤打開一個文本文件:

Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

的文件權限被設置爲完全訪問權限,我以管理員身份運行。

有沒有辦法解決它?

謝謝。

+0

該文件在其他地方打開,使其僅被鎖定。 – 2011-06-15 09:38:19

+0

它是一個什麼樣的項目?代碼是否在CodeAccessPermissions不包含FileIOPermission的環境中運行? – 2011-06-15 09:39:28

+0

@藝術 - 那不是問題 – 2011-06-15 09:48:34

回答

3

如果您正在部署ClickOnce應用程序,則會顯示錯誤,因爲您沒有合適的信任級別查看文件。這與文件權限不同。

您可以通過以下方式之一解決這個問題:

  1. 添加以下的屬性到你的程序:

    [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")] 
    
  2. 改變你的項目屬性的信任級別。簡單的方法是隻檢查「這是一個完全信任的應用程序」,或者您可以繼續並手動添加文件權限。

+0

我在哪裏添加第一個選項?我在誤差發生 方法[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand,名稱=「FullTrust」)] 私人無效解析(字符串文件) { 之前添加它String data = null; StreamReader sr = new StreamReader(file); } 但我現在又遇到了另一個錯誤「Request Failed」。在方法開始時。 謝謝。 – DreX 2011-06-15 09:57:12

+0

@DreX如果請求失敗,則意味着操作系統強制全部或部分應用程序爲部分信任;我已經更新了我的答案,包括一些有關文件阻塞的信息,可能有所幫助。 – 2011-06-15 10:08:02

+0

@Andras將它添加到您的主程序類。您也可以通過http://msdn.microsoft.com/en-us/library/system.security.hostsecuritymanager.aspx – foxy 2011-06-15 10:13:28

1

它是一個Web應用程序或Winforms/Cosole應用程序。 對於Web應用程序,用戶將不是Admin,而是執行IIS權限的用戶。您可能需要爲該文件夾或文件提供該用戶/角色權限。

+0

它是一個控制檯應用程序。 – DreX 2011-06-15 09:44:06

3

這不是文件系統權限問題 - it's about 'trust'

這是一個web應用程序?如果是這樣,你需要提高信任度。

您也可能會遇到問題,如果該程序從網絡共享運行,或者如果它加載從網絡共享的組件(雖然我覺得有些淨2的一生中改變這些規則)。谷歌.net'完全信任' - 或者,實際上,你得到的例外 - 你會得到一個答案。

有此也是如此:System.Security.Permissions.FileIOPermission when using MEF to load dll's

(更新)

因爲它不是一個Asp.Net應用程序 - 您可能需要Request Permission for a Named Permission Set - 請求"FullTrust"組按所給的例子。

不過,我覺得有你不說關於應用程序的東西 - 因爲在我看來,如果它正在建造並從您的計算機上運行,​​那麼你不應該需要做到這一點。

例如,如果exe(或請求此權限的DLL)已從不可信網絡位置複製到目標機器,則它可能已被操作系統阻止 - 在這種情況下,它將被強制以部分信任運行。 You could try the steps outlined on this article on sevenforums,檢查每個應用程序文件夾中的二進制文件,以確保沒有被堵塞,如果是這樣,將其解除封鎖。

然後嘗試再次運行它。