2016-03-25 5 views
1

私はロギングソリューションを使用しており、アプリケーションの実行中に開いているテキストファイルに書き込みます。私はStreamWriterを使ってファイルに書き込みます。マイロガーコードは単純に(ストリームをオープンし、書くこと)である。StreamWriterが開かれている間、変更された日付は更新されません

public void Open(string filePath, bool append) 
    { 
     if (this.logWriter != null) 
      throw new InvalidOperationException(
       "Logger is already open"); 

     if (!Directory.Exists(Path.GetDirectoryName(filePath))) 
      Directory.CreateDirectory(Path.GetDirectoryName(filePath)); 

     this.logWriter = new StreamWriter(filePath, append); 
     this.logWriter.AutoFlush = true; 
    } 

public void CreateEntry(string entry) 
    { 
     if (this.logWriter == null) 
      return; 

     this.logWriter.WriteLine(entry); 

    } 

問題は、ファイルへの書き込み中に、エントリがファイルサイズが変更され、書かれているが、「変更日」は属性が変化しないことです。何かご意見は?修正日を手動で更新するにはどうすればよいですか?

PS:私は、Windows 7

答えて

2

FindNextFileによって返された更新日がディレクトリエントリに保存されたキャッシュされた値である日午前、ないMFTレコード(iノードに相当)に保存され、常に更新された値。これはパフォーマンス上の理由からです。そのため、各ファイルの読み込みではなく、1回の読み込みでディレクトリ全体の情報を取得できます。ファイルへのハンドルがクローズされるたびに

は、それが更新されます。*

あなたはいつもGetFileInformationByHandleまたはGetFileInformationByHandleExを使用して最新の情報を得ることができます。この機能を使用するには、CreateFileを使用してファイルを開き、読み取りアクセス権と書き込みアクセス権を要求せずに共有を許可する必要があります。

HANDLE hFile = CreateFile(_T("Path/To/File"), 
    0, // No read or write access needed 
    FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, 
    NULL, 
    OPEN_EXISTING, // Don't create 
    0, NULL); 

このハンドルは、GetFileInformationByHandleExで使用できます。

単にこのハンドルを閉じると、現在の値を反映するようにディレクトリエントリが更新されます。

*(その名前によって開かれたハンドルがクローズされるたびに、ファイルが複数のハードリンクを持つことができるので、正確である。)詳細な説明のための

+0

感謝 –

関連する問題