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 的加密结果)。

有人对我为什么遇到这个问题有任何想法吗?谢谢!

4

2 回答 2

8

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

File.WriteAllText(Application.StartupPath + "\\MyFile.txt", "Password=" + x);
于 2014-04-01T03:57:50.093 回答
5

让我们看一下这段代码:

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

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

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

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

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

于 2014-04-01T03:58:01.977 回答