2012-04-03 9 views
6

ツールのユーザーが指定した時間枠内にログファイルを収集するツールを作成しました。今までは、ログファイルのFile.GetLastWriteTimeメソッドを使用して、ユーザーが入力した時刻と比較し、これらの比較の結果に基づいてログファイルのコレクションをベースにしていました。小さなコードスニペットは次のとおりです。File.GetLastWriteTimeが「古くなった」値を返すようです

しかし、私のツールはログファイルを収集しなかったことに気づきました。このメソッドによって返されたDateTimeが期限切れだったようです(このdatetimeの値よりもファイルに最近のログが記録されていました)。

問題のファイルの「Date Modified」を見ると、「古くなっていました」、「Date Modified」よりも最近のファイルにログが記録されました。

正確な「GetLastWriteTime」または「Date Modified」の値はどのように取得できますか?

+0

*このメソッドによって返された* DateTimeは古いですか?* – V4Vendetta

+1

しばらくしても日付が更新されませんか?たとえば、変更された日付が「古くなっています」と表示されたら、〜30秒待ってから再度日付を確認してください。 – Reniuz

+1

また、この記事をお読みください:http://blogs.technet.com/b/asiasupp/archive/2010/12/14/file-date-modified-property-are-not-updating-while-modifying-a-file-あなたは同じことを経験しているかもしれません。 – Reniuz

答えて

9

私のexpirience中に私はあなたのようないくつかの問題を投げに行きました。 でないWindowsVista/7システムでは、常にが信頼できる結果を返します。

しばらくして、私たちは、このリンクが見つかりました:Disabling Last Access Time in Windows Vista to improve NTFS performance

をし、それがは「強いキー」ではないことを理解しています。その問題を解決するために、私たちは

GetLastWriteTime 

のコールを中継停止、しかし店は、最後のいくつかのフィールドまたはその名前には、「FileName_yyyymmdd」のように、またはそのファイル内のファイルの値を変更しました。

.NET FileInfo.LastWriteTime & FileInfo.LastAccessTime are wrong

は、あまりにもあなたの場合に有用であり得る:ここで見つけることができます GetLastAccessTimeのための別の解決策があり

これについての私の一般的な意見は次のようなものです:そのパラメータでリレーしないで、あなたのアーキテクチャに何か他のものを発明してください。

幸運

+3

私はファイル作成日に頭が痛いです。ファイルを作成すると、それを削除して再度作成します(同じ名前)。作成日は以前に作成されたファイルになります。しばらくして、私は、ファイルが15秒間に再作成された場合、OSがキャッシュから日付を復元することを発見しました。解決策は、あなたが言及したように毎回ファイル名を変更することでした。 – Reniuz

+1

@ Reenuz:おなじみのように聞こえます:)私たちはWindowsXp - > Windows7 64ビットから全く異なる国/文化で多くのクライアントを抱えていたため、そのような信頼できない情報は絶対に受け入れられませんでした。 – Tigran

1

Tigranは右です:

あなたは最後の書き込み時間に加えて、ファイルサイズの変化を比較してみることができます。それは私がやっていることです(FileSystemWatcherでは、それは時間ウィンドウ内のフィールドを比較するのに似ています)。

+0

エリックありがとう!前にそれを考えなかった! – DukeOfMarmalade

関連する問題