17

次のコードを使用して、ディレクトリの更新日時をラベルに書き込みます

string selectedPath = comboBox1.SelectedItem.ToString();
DateTime lastdate = Directory.GetLastWriteTime(selectedPath);
datemodified.Text = lastdate.ToString();

12/31/1600 7:00:00 PM という日付が返されますが、その日付がどこから取得されたのかわかりません。なぜその日付が返されるのか、どうすれば修正できるのかを理解してくれる人はいますか? .NET 3.5 を使用しています

4

6 に答える 6

42

ドキュメントから:

path パラメータに記述されたディレクトリが存在しない場合、このメソッドは、現地時間に調整された西暦 1601 年 1 月 1 日 (CE) 協定世界時 (UTC) の午前 12:00 を返します。

おそらくあなたのタイムゾーンはUTC-5(1月)で、ディレクトリは存在しません...

于 2012-05-14T13:08:45.877 に答える
0

GetLastWriteTime常に信頼できる日時を返すとは限りません。これを使用してください

string selectedPath = comboBox1.SelectedItem.ToString();
DateTime now = DateTime.Now;
TimeSpan localOffset = now - now.ToUniversalTime();
DateTime lastdate = File.GetLastWriteTimeUtc(selectedPath) + localOffset;
datemodified.Text = lastdate.ToString();
于 2016-05-05T17:30:31.503 に答える
0

最初に考えたのは、時間が正しく設定されているということです。次に考えられるのは、そのフォルダーを右クリックして、プロパティの内容を確認することです。最後に、新しいテスト フォルダーを作成し、そのフォルダーで GetLastWriteTime テストを実行して、何が返されるかを確認します。

于 2012-05-14T13:10:31.113 に答える
0

古い質問ですが、今日はこの問題に直面しました。その特定の日付は、パスが無効な場合やファイルが存在しない場合にも返されます。これらの場合には例外が組み込まれていないためです。

于 2016-07-27T13:06:30.620 に答える
0

GetLastWriteTime()/の結果でファイルが見つからないかどうかをテストする簡単な方法GetLastWriteTimeUtc()は、ファイル/ディレクトリが見つからない状態を示すために使用されるセンチネル エポックの日付/時刻をハードコーディングせずに、次のとおりです。

// ##### Local file time version #####
DateTime fileTimeEpochLocal=DateTime.FromFileTime(0);
// Use File.GetLastWriteTime(pathname) for files
// and Directory.GetLastWriteTime(pathname) for directories
DateTime lastWriteTime=Directory.GetLastWriteTime(selectedPath); 

// Check for a valid last write time
if (lastWriteTime!=fileTimeEpochLocal) // File found
    DoSomethingWith(selectedPath,lastWriteTime);
else // File not found
    HandleFileNotFound(selectedPath);

// ##### UTC file time version #####
DateTime fileTimeEpochUtc=DateTime.FromFileTimeUtc(0);
// Use File.GetLastWriteTimeUtc(pathname) for files
// and Directory.GetLastWriteTimeUtc(pathname) for directories
DateTime lastWriteTimeUtc=Directory.GetLastWriteTimeUtc(selectedPath);

// Check for a valid last write time
if (lastWriteTimeUtc!=fileTimeEpochUtc) // File found
    DoSomethingWith(selectedPath,lastWriteTimeUtc);
else // File not found
    HandleFileNotFound(selectedPath);
于 2019-01-14T19:20:51.820 に答える