質問

条件:

  • 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では動作/サポートされていません。私のポイントは何ですか?これに対する簡単な解決策はおそらくないので、自分で何かを考え出す必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top