我的应用程序如何查找旧版本的辅助文本文件?

时间:2012-06-05 17:01:46

标签: c# winforms file file-io windows-xp

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

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

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

...显示6/4/2012 2:00:44 pm

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

???

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

1 个答案:

答案 0 :(得分: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)) { // ...