C#和File.WriteAllText错误

时间:2012-03-02 13:07:25

标签: c# file-permissions

我正在构建一个简单的C#应用​​程序,它必须在文件中写入用户输入。

我的第一个问题是我希望用户能够设置设置文件的路径,但我希望程序能够在以下启动时读取设置文件。

我的第二个问题是,如果我使用类似的东西:

    File.WriteAllText(@"C:\Users\Public\settings.settings", message);

我收到以下错误:

    System.Security.SecurityException: Request for the permission of type 
    'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, 
    Culture=neutral, PublicKeyToken=b77a5c561934e089' failed. at 
    System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& 
    stackMark, Boolean isPermSet)   at System.Security.CodeAccessPermission.Demand()
       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, FileAccess access, 
    FileShare share, Int32 bufferSize, FileOptions options)

     at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize)
    at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding)
    at System.IO.File.WriteAllText(String path, String contents, Encoding encoding)
    at IMDBGrabber.frmSettings.writeToFile(String p)
    The action that failed was: Demand

    The type of the first permission that failed was: System.Security.Permissions.FileIOPermission

    The Zone of the assembly that failed was: MyComputer

有什么想法吗?

4 个答案:

答案 0 :(得分:5)

令人惊讶的是,但并非所有用户都可以访问"C:\Users\Public"

尝试将文件放入Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\settings.settings";

所有用户都应该有权在那里写。

同时考虑使用特定于应用的子文件夹。

答案 1 :(得分:3)

右键点击项目=>属性并检查“安全”选项卡。取消选中“启用ClickOnce安全设置”,然后重试。 如果问题仍然存在,请取消选中“签名”标签中的唯一选项。

答案 2 :(得分:1)

我必须以管理员身份运行我的应用才能在c:中写入受保护的文件夹。例如,如果在visual studio中调试应用程序,请确保右键单击" C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ devenv.exe"并选择"以管理员身份运行"。然后从那里打开你的解决方案。我的应用程序试图写入c:\

的根目录

答案 3 :(得分:0)

您的C:\ Users \ Public文件夹是否可写?如果不是,请确保它是,因为异常跟踪告诉您存在SecurityException(与您可能已经猜到的安全问题相关),并且先前的异常与文件IO相关。所以它最有可能是你的应用程序。不(或运行它的用户)没有该文件夹的写权限。