0

条件:

  • ウィンドウズ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 へのその呼び出しで、多くのディスク アクティビティがあります。ファイルのフォルダーを実際にスキャンせずに、フォルダーの内容の変更を検出する方法はありますか?

4

3 に答える 3

2

Win95 から少なくとも WinXP までのすべてのバージョンで動作すると主張するサンプルがあります。Win98 と VB5 で開発されました。(その後、以下のドキュメントへのリンクが提供されています)文書化されていないSHChangeNotify *関数を使用します。

SHChangeNotifyRegister: シェル変更通知の受信

SHChangeNotifyRegister 関数 SHChangeNotifyDeregister 関数

ここにReadDirectoryChangesWを使用する別のソリューションがあります。

VB6 WinAPI ReadDirectoryChangesW (Yang Kok Wah からの 5 番目の投稿を確認してください)

于 2009-06-21T17:06:01.847 に答える
1

「フォルダの内容の変更」を定義します。

ファイルが追加、削除、または名前変更されたことを意味する場合、そのようなイベントが発生するたびに、フォルダーの変更されたタイムスタンプが更新されます。

ファイルがいつ変更されたかを知りたい場合は、ファイルを読み取る必要があります。

そうは言っても、あなたがやろうとしていることを見て(フォルダーをスキャンして新しい.usvファイルを探し、それらを処理して削除する)、フォルダーのタイムスタンプを追跡し、collectfilesを呼び出す直前に更新するのが最善です(ログを記録する正しいタイミングは、collectfiles を呼び出す直前であることに注意してください。そうしないと、collectfiles 呼び出し中またはその直後にファイルが追加された場合に、起動しないリスクがあります)。

于 2009-06-21T16:39:44.410 に答える
0

あなたは具体的にVBで何かを要求し、win98で実行していますが、これには答えがありませんが、MSにはFindFirstChangeNotificationを使用してWindows2000+でこれを達成する方法に関するac/win32の例があります。もう 1 つのことは、どうやら .NET の " FileSystemWatcher " が Win98 で動作/サポートされていないことです。私のポイントは何ですか?これにはおそらく簡単な解決策はなく、自分で何かを考え出す必要があります。

于 2009-06-21T16:49:12.383 に答える