2

我有从文本文件中读取加密凭据的代码。我更新了该文本文件以包含连接字符串。其他所有内容都可以很好地读取和解密,但连接字符串却没有(当然,我也相应地更新了我的代码)。

所以我想知道:它是否在读取正确的文件。答案:不!\bin\debug 中的文件日期为 2012 年 6 月 5 日上午 9:41,但此代码:

using (StreamReader reader = File.OpenText("Credentials.txt")) {
    string line = null;
    MessageBox.Show(File.GetCreationTime("Credentials.txt").ToString());

...显示 2012 年 6 月 4 日下午 2:00:44

所以我在我的硬盘驱动器中搜索“Credentials.txt”的所有实例,看看它从哪里读取文件。它只找到了一个实例,即今天日期在 \bin\debug 中的实例。

???

注意:Credentials.txt 不是我的解决方案的一部分;应该是吗?(IOW,我只是将它复制到 \bin\debug 中,我没有执行“添加|现有项目”)

4

1 回答 1

4

如果您不更改当前目录,则 bin\Debug 中的文件将是正在读取的文件,因为您没有指定完整路径。

该问题可能是由于不同文件日期之间的差异造成的。创建日期(这是您获取并显示为 6/4 @ 2:00:44 pm 的日期)可能与修改日期不同(这是 Windows 资源管理器中默认显示的日期)。可以使用File.GetLastWriteTime而不是获取此日期GetCreationTime

话虽如此,我建议使用文件的完整路径,而不是假设当前目录与可执行路径相同。指定完整路径(可以根据可执行路径来确定)会更安全,以后也不太可能出问题。这可以通过以下方式完成:

var exePath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
var file = System.IO.Path.Combine(exePath, "Credentials.txt");
using (StreamReader reader = File.OpenText(file)) { // ...
于 2012-06-05T17:05:06.243 回答