• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルを開いたことを検知したい)

ファイルを検知する方法

このQ&Aのポイント
  • ファイルを検知する方法についての質問です。
  • ファイルを開いたことを検知するためには、System.IO.FileSystemWatcherクラスを使用します。
  • ファイルの変更、作成、削除、名前の変更などのイベントを監視することができます。

質問者が選んだベストアンサー

  • ベストアンサー
noname#259269
noname#259269
回答No.5

>どうもテキストファイルをメモ帳で開いた時はアクセス日時が更新されない事が多いようです。 >エクセルを開いたらうまく行きました。 なるほどお悩みの原因がわかりました。 NTFSのファイルアクセス日時の検知分解能は1時間なんですよ。ですから一度アクセスしたファイルに、1時間以内に複数回アクセスしても、初回しかイベントが発生しません。これは制約事項です。 http://msdn.microsoft.com/ja-jp/library/cc429752.aspx このページの「注意」部分の説明を読んでください。

j-y-a
質問者

お礼

なるほど、そういうことだったのですね。 ありがとうございました。

その他の回答 (4)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

メモ帳などで開いた際に LastAccessTimeが変化しないのは 単に読んでいるだけだからなのかも ・・・ IO.FileStreamなどで ファイルを開いて読むだけの場合 初回はFileSystemWatcherのイベントChangedが発生しますが2回目以降は発生しないようです Excelなどは WinAPIのSetFileTimeなどでファイルを開いた場合に更新をしているのかもしれません

j-y-a
質問者

補足

なるほど・・そうすると、ファイルが開いたことをFileSystemWatcherでもれなく検知することは不可能ですね。 このほかにファイルが開いたことを検知する方法って何か無いでしょうか?

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

お示しのコードで VB2003/2005 + WinXP SP3 の環境で問題なく動作しております コンソールアプリ or WindowsFormアプリともに動作しております 実行環境は何でしょう? watcher.WaitForChanged(System.IO.WatcherChangeTypes.All) のタイプで呼び出した場合 タイムアウトはしないと思いますよ watcher.WaitForChanged(System.IO.WatcherChangeTypes.All,Wait時間) のタイプならWait時間を過ぎてもイベントが発生しなかった場合にタイムアウトになるかと ・・・

j-y-a
質問者

お礼

どうもテキストファイルをメモ帳で開いた時はアクセス日時が更新されない事が多いようです。 エクセルを開いたらうまく行きました。

j-y-a
質問者

補足

ありがとうございます。 環境はVB2005express edition + WindowsXP home edition SP2とVB2008express edition + WindowsXP pro SP2を使用しています。 それぞれステップインで試してみましたが、何れも Dim changedResult As System.IO.WaitForChangedResult = _ watcher.WaitForChanged(System.IO.WatcherChangeTypes.All) (※ファイルを開いてもここから進んでくれないと記載のある部分) ここで止まってしまいます。 即ち、イベントが起きたと認識されていないのです。 ・・と、ここまで書いたところで気づいたのですが、ファイルを開いてもアクセス日時が更新されていません・・・。テキストを開いたりプロパティを開いても全く更新されない・・・これが問題みたいですね。 なぜ更新されないのでしょう?

noname#259269
noname#259269
回答No.2

ファイルフォーマットは NTFS でしょうか?

j-y-a
質問者

補足

はい、NTFSです。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

直の回答ではないですが、 参考にされたサイトでは掲示板にて質問等も受け付けてますが。。。

j-y-a
質問者

補足

参考にしたサイト以外では質問禁止なのでしょうか? 普段から教えてgooを使用しており、回答がつくとメールが来る等利点が多い為こちらで質問したまでです。 当然マルチ投稿しているわけではありませんので。 引続き、回答をお待ちしております。

関連するQ&A