异常:"拒绝访问路径..."

3
我正在使用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调试器运行它? - Jesse Carter
无论哪种方式,我都得到了相同的结果。 - Jeff
我认为您的账户没有对该位置的写入权限,这就是它失败的原因。 - Panda Zhang
请您调试一下并告诉我们从Application.StartupPath返回的实际值。 - Jesse Carter
@Jeff,你能否请在你的问题中添加代码?谢谢。 - Sumner Evans
显示剩余2条评论
2个回答

8

Application.StartupPath是一个文件夹(你的应用程序从这里启动)。试着在该文件夹内指定一个精确的文件名:

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

啊,我知道我怎么做了。谢谢 @Joel Coehoorn 和 @nXu! - Jeff

5

让我们来看一下这段代码:

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

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

此外,使用StartupPath是不好的实践。您可以创建一个设置启动路径到任何位置的快捷方式。但是,通常默认的StartupPath位于Program Files文件夹下的某个位置。该文件夹下的项目默认情况下对标准用户为只读。相反,您应该查看使用Application Data文件夹,如下所示:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

最后,这看起来确实是在以明文形式保存密码。我真的需要再强调一下这有多糟糕吗?即使是加密过的密码也不应该保存(哈希与加密不同),而且这是如此重要的一件事情,甚至连测试/学习/概念验证代码都不应该这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接