【问题标题】:Exception: "Access to the path ... is denied"例外:“访问路径......被拒绝”
【发布时间】:2014-04-01 03:16:06
【问题描述】:

我正在使用 C# 编写一个程序,其中一部分是在 Application.StartupPath 文件夹中创建一个目录,然后使用 System.IO.File.WriteAllText() 在其中写入一个文本文件。我的问题是我的程序崩溃了,抛出一个UnauthorizedAccessException 并告诉我“访问路径被拒绝”,这很奇怪,考虑到无论我从哪个目录运行程序,它都会崩溃,无论是它从我的云文件夹、桌面、我的文档等运行,即使在任何这些目录中以管理员身份运行。

我调试它的路径是C:\Users\Jeff\Google Drive\Documents\Visual Studio 2013\Projects\Palobo\Palobo\bin\Debug。是using System.IO;,我使用的代码包括:

Directory.CreateDirectory(Application.StartupPath);
File.WriteAllText(Application.StartupPath, "Password=" + x);

其中x 是用户输入的一些字符串数据。

我得到的错误是:

拒绝访问路径 'C:\Users\Jeff\Google Drive\Documents\Visual Studio 2013\Projects\Palobo\mzdon29。

(mzdon29 是 jwalk96 的加密结果)。

有没有人知道我为什么会遇到这个问题?谢谢!

【问题讨论】:

  • 您是在外部运行 exe,还是尝试通过 IDE 中的调试器运行它?
  • 两者,无论哪种方式,我都会得到相同的结果。
  • 你能告诉我们发生错误的那一行的代码吗?
  • 我认为您的帐户没有对该位置的写入权限。这就是它失败的原因。
  • 能否请您调试并告诉我们您从 Application.StartupPath 返回的实际值

标签: c# unauthorizedaccessexcepti


【解决方案1】:

Application.StartupPath 是一个文件夹(您的应用程序的启动位置)。尝试在该文件夹中指定一个确切的文件名:

File.WriteAllText(Application.StartupPath + "\\MyFile.txt", "Password=" + x);

【讨论】:

  • 啊,我明白我做了什么。谢谢@Joel Coehoorn 和@nXu!
【解决方案2】:

让我们看看这段代码:

Directory.CreateDirectory(Application.StartupPath);
File.WriteAllText(Application.StartupPath, "Password=" + x);

您正在尝试创建一个已经存在的目录,然后您正在尝试使用该目录作为文件名!您需要在路径末尾添加一些内容,以便使用新文件夹和文件。

此外,首先使用 StartupPath 是一种不好的做法。您可以创建一个快捷方式,将启动路径设置为anywhere。但具体来说,默认的 StartupPath 通常位于 Program Files 文件夹下的某个位置。默认情况下,此文件夹下的项目对标准用户只读。相反,您应该考虑使用 Application Data 文件夹,如下所示:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

最后,这看起来像是在以纯文本形式保存密码。我真的需要回顾一下这有多糟糕吗? 你甚至不应该保存密码加密(散列不同于加密),这是非常重要的事情之一,你甚至不应该为测试而这样做/学习/概念验证代码。

【讨论】:

    猜你喜欢
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多