【问题标题】:UnauthorizedAccessException when trying to write to text file in C#尝试在 C# 中写入文本文件时出现 UnauthorizedAccessException
【发布时间】:2012-03-13 08:13:31
【问题描述】:

我正在尝试编写一个包含在我的安装程序中的空白文本文件,但出现以下错误;

System.UnauthorizedAccessException: Access to the path 'C:\Program Files (x86)\Hex Technologies\wamplocation.txt' is denied.

它似乎是通过我的安装程序安装文件后的权限,但是如何将文件设置为在安装文件后完全可修改?!这可以通过 C# 完成吗?!

已编辑;

           wamp_url = openFileDialog1.FileName.ToString();
           String EnviromentPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
           StreamWriter outfile = new StreamWriter(EnviromentPath + @"\Hex Technologies\wamplocation.txt");
           outfile.Write(wamp_url);
           outfile.Close();

【问题讨论】:

  • Window's 7 ?,如果是这样,您应该写入 ProgramData 而不是 Program Files

标签: c# streamwriter


【解决方案1】:

您不应将可修改的数据文件存储在 Program Files 路径中。使用Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 或Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

Program Files\... 路径受到保护,不会被 Win7+ 上的普通用户修改。试图绕过这种保护是个坏主意。

【讨论】:

  • 谢谢,我遇到了另一个错误,请参阅下面的评论,您能帮忙吗?
【解决方案2】:

UAC 可能会妨碍您。

理想情况下,您的程序不应写入此位置,因为此修改文件将在安装过程中进行修改,您无需在其他任何地方确保您正在运行提升。

如果要在运行时修改此文件,您应该考虑将 %appdata% 用于用户数据或将 %programdata% 用于程序数据而不是程序文件。

【讨论】:

  • 谢谢,但现在我收到一条消息,说“该文件正在被另一个进程使用”。我在上面插入了我的代码以显示我的代码是什么样的!
  • 应用程序数据中是否存在“Hex Technologies”文件夹?
  • 是的,我仔细检查了输入流写入器的字符串,它与 .txt 文件的 url 匹配。
  • 下载handle,运行看看是哪个进程锁定了你的文件
  • 我运行 technet.microsoft.com/en-us/sysinternals/bb896653 并没有出现 txt 文件?!
猜你喜欢
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
  • 2011-02-02
相关资源
最近更新 更多