フォルダーの内容が変更されたかどうかを検出しますか?
-
06-07-2019 - |
質問
条件:
- Windows 98 SE
- WMIは利用できません
MSScriptを使用したVBScriptのステロイドラッピングを使用して記述されたこのようなコードがあります。
do
a = files.collectfiles( "c:\userver", "" )
for i = 0 to ubound( a )
f = a(i)
if strings.endswith( f, ".usv" ) then
d = files.readfilee( f )
on error resume next
executeglobal d
nErr = err.number
sErr = err.description
on error goto 0
if nErr <> 0 then
trace "*** Error " & nErr & ", " & sErr
end if
files.deletefile f
end if
next
system.sleep 10
system.cooperate
loop
files.collectfilesの呼び出しには、多くのディスクアクティビティがあります。実際にフォルダーのファイルをスキャンせずに、フォルダーの内容の変更を検出する方法はありますか?
解決
「フォルダーの内容の変更」を定義します。
ファイルが追加、削除、または名前変更されたことを意味する場合、そのようなイベントが発生するたびに、フォルダーの変更されたタイムスタンプが更新されます。
代わりにファイルがいつ変更されたかを知りたい場合は、それらを読む必要があります。
それは、あなたがしようとしていることを見て(フォルダをスキャンして新しい.usvファイルを探し、処理して削除する)、フォルダのタイムスタンプを追跡し、呼び出す直前に更新するだけですcollectfilesが最適です(collectfilesを呼び出す前にログを記録する正しい時間であることに注意してください。そうしないと、collectfilesの呼び出し中またはその直後にファイルが追加された場合に起動しないリスクがあります)。
他のヒント
Win95からWinXPまでのすべてのバージョンで動作すると主張するサンプルがあります。 VB5でWin98の下で開発されました。文書化されていないSHChangeNotify *関数(次に提供されるドキュメントへのリンク)を使用します。
SHChangeNotifyRegister:シェル変更通知を受信する
SHChangeNotifyRegister関数 SHChangeNotifyDeregister関数
ReadDirectoryChangesW を使用した別のソリューションがあります。ここ:
VB6 WinAPI ReadDirectoryChangesW (Yang Kokの5番目の投稿を確認ワウ)
VBでwin98で実行しているものを具体的に要求しましたが、これに対する答えはありませんが、MSは FindFirstChangeNotification 。もう1つは、&quot; FileSystemWatcher &quot; .NETのWin98では動作/サポートされていません。私のポイントは何ですか?これに対する簡単な解決策はおそらくないので、自分で何かを考え出す必要があります。