
ファイルを開いたことを検知したいのですが、うまく出来ません。
http://dobon.net/vb/dotnet/file/filesystemwatche …
を参考に若干編集してみたのですが・・・どうしたらうまく検知してくれるのでしょうか?
ファイルが開かれたかどうかは最終アクセス日時の変更があったかどうかで判断します
Dim watcher As New System.IO.FileSystemWatcher
watcher.Path = "C:\My Documents"
watcher.Filter = "*"
watcher.NotifyFilter = System.IO.NotifyFilters.FileName Or _
System.IO.NotifyFilters.DirectoryName Or _
System.IO.NotifyFilters.LastWrite Or _
System.IO.NotifyFilters.LastAccess
watcher.IncludeSubdirectories = False
Dim changedResult As System.IO.WaitForChangedResult = _
watcher.WaitForChanged(System.IO.WatcherChangeTypes.All)
※ファイルを開いてもここから進んでくれない
If changedResult.TimedOut Then
Console.WriteLine("タイムアウトしました。")
Return
End If
Select Case changedResult.ChangeType
Case System.IO.WatcherChangeTypes.Changed
Console.WriteLine(("ファイル 「" + _
changedResult.Name + "」が変更されました。"))
Case System.IO.WatcherChangeTypes.Created
Console.WriteLine(("ファイル 「" + _
changedResult.Name + "」が作成されました。"))
Case System.IO.WatcherChangeTypes.Deleted
Console.WriteLine(("ファイル 「" + _
changedResult.Name + "」が削除されました。"))
Case System.IO.WatcherChangeTypes.Renamed
Console.WriteLine(("ファイル 「" + _
changedResult.OldName + "」の名前が「" + _
changedResult.Name + "」に変更されました。"))
End Select
No.5ベストアンサー
- 回答日時:
>どうもテキストファイルをメモ帳で開いた時はアクセス日時が更新されない事が多いようです。
>エクセルを開いたらうまく行きました。
なるほどお悩みの原因がわかりました。
NTFSのファイルアクセス日時の検知分解能は1時間なんですよ。ですから一度アクセスしたファイルに、1時間以内に複数回アクセスしても、初回しかイベントが発生しません。これは制約事項です。
http://msdn.microsoft.com/ja-jp/library/cc429752 …
このページの「注意」部分の説明を読んでください。
No.4
- 回答日時:
メモ帳などで開いた際に LastAccessTimeが変化しないのは
単に読んでいるだけだからなのかも ・・・
IO.FileStreamなどで ファイルを開いて読むだけの場合
初回はFileSystemWatcherのイベントChangedが発生しますが2回目以降は発生しないようです
Excelなどは WinAPIのSetFileTimeなどでファイルを開いた場合に更新をしているのかもしれません
この回答への補足
なるほど・・そうすると、ファイルが開いたことをFileSystemWatcherでもれなく検知することは不可能ですね。
このほかにファイルが開いたことを検知する方法って何か無いでしょうか?
No.3
- 回答日時:
お示しのコードで VB2003/2005 + WinXP SP3 の環境で問題なく動作しております
コンソールアプリ or WindowsFormアプリともに動作しております
実行環境は何でしょう?
watcher.WaitForChanged(System.IO.WatcherChangeTypes.All)
のタイプで呼び出した場合 タイムアウトはしないと思いますよ
watcher.WaitForChanged(System.IO.WatcherChangeTypes.All,Wait時間)
のタイプならWait時間を過ぎてもイベントが発生しなかった場合にタイムアウトになるかと ・・・
この回答への補足
ありがとうございます。
環境はVB2005express edition + WindowsXP home edition SP2とVB2008express edition + WindowsXP pro SP2を使用しています。
それぞれステップインで試してみましたが、何れも
Dim changedResult As System.IO.WaitForChangedResult = _
watcher.WaitForChanged(System.IO.WatcherChangeTypes.All)
(※ファイルを開いてもここから進んでくれないと記載のある部分)
ここで止まってしまいます。
即ち、イベントが起きたと認識されていないのです。
・・と、ここまで書いたところで気づいたのですが、ファイルを開いてもアクセス日時が更新されていません・・・。テキストを開いたりプロパティを開いても全く更新されない・・・これが問題みたいですね。
なぜ更新されないのでしょう?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- ドライブ・ストレージ SSDを追加したら昔のHDDがおかしくなった 4 2023/03/23 13:25
- Ruby 教えてください 2 2023/01/04 17:50
- ボランティア ウクライナ人からどういうこと? 6 2022/03/28 07:37
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Excel(エクセル) excel2003でxlsxファイルを更新したい 6 2023/01/31 15:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel】[Expression.Error] ...
-
Batch: フォルダ内の特定のファ...
-
共有フォルダに誰が何にアクセ...
-
特定のエクセルファイルを起動...
-
社内Excel共有ブックでの保存ト...
-
Excel VBA 処理後データが重た...
-
ファイル名をリカーシブルに取...
-
excelを共有ファイルにすると行...
-
Access VBA を利用して、フォル...
-
CD-ROM内のzipファイルの使用に...
-
FDを入れてもワードの画面に出...
-
ホームページ作成中に溜まる不...
-
matlabでファイルをn行目から変...
-
VBAでCSVファイルが使用中かど...
-
Dream weaverで、誤ってファイ...
-
DLLに画像情報を渡したいのですが
-
ファイル名が決まっていないフ...
-
ファイルの先頭に追加書込みす...
-
ファイルの途中に文字列を挿入
-
CSVデータの取り込み方(初心者...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel】[Expression.Error] ...
-
共有フォルダに誰が何にアクセ...
-
Batch: フォルダ内の特定のファ...
-
特定のエクセルファイルを起動...
-
VBAでCSVファイルが使用中かど...
-
社内Excel共有ブックでの保存ト...
-
Access VBA を利用して、フォル...
-
(Excelマクロ)datファイルをエ...
-
AccessVBAで作成したExcelファ...
-
事務の派遣で働いています。多...
-
excelを共有ファイルにすると行...
-
【アクセス】「ほかのユーザー...
-
拡張子が「cda」のファイルを聞...
-
月が変わったら自動でシートが...
-
Excel VBA 処理後データが重た...
-
WEBクエリが使えない場合のHPデ...
-
access関数を説明できる方いま...
-
ファイルの途中に文字列を挿入
-
特定のフォルダに入れたファイ...
-
tmpファイル なぜできる?削除...
おすすめ情報