2011-06-15 90 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,检查每个应用程序文件夹中的二进制文件,以确保没有被堵塞,如果是这样,将其解除封锁。

然后尝试再次运行它。