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());

...ショー 6/4/2012 2:00:44 pm

そこで、ハード ドライブで「Credentials.txt」のすべてのインスタンスを検索し、ファイルの読み取り元を確認しました。\bin\debug に今日の日付のインスタンスが 1 つだけ見つかりました。

???

注: Credentials.txt は私のソリューションの一部ではありません。それはすべきですか?(IOW、単に \bin\debug にコピーしただけで、「追加 | 既存の項目」は実行しませんでした)

4

1 に答える 1

4

現在のディレクトリを変更しない場合、絶対パスを指定していないため、bin\Debug 内のファイルが読み取られます。

この問題は、異なるファイルの日付の違いが原因である可能性があります。作成日 (6/4 @ 2:00:44pm として取得して表示する日付) は、変更日 (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 に答える