2009-06-21 5 views
0

条件:フォルダの内容が変更されたかどうかを検出しますか?

  • の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を呼び出すと、多くのディスクアクティビティが発生します。ファイルのフォルダを実際にスキャンすることなく、フォルダの内容の変化を検出する方法はありますか?

答えて

1

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

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

ファイルの変更時期を知りたい場合は、そのファイルを読む必要があります。

あなたが何をしようとしているか(新しい.usvファイルをスキャンして処理して削除する)、フォルダのタイムスタンプを追跡して直前に更新するcall collectfilesが最適です(ログ収集の正確な時刻はcollectfilesを呼び出す前です)。そうしないと、collectfiles呼び出し中または直後にファイルが追加された場合に、起動しなくなる危険性があります。

+0

リンクは常に有用であるが、この種の良いアドバイスは素晴らしいです。入力いただきありがとうございます。 – bugmagnet

0

具体的には、VBでwin98で動作するように頼んだが、私はこれに答えていないが、FindFirstChangeNotificationでこれを実現する方法のc/win32の例がある。別のことは、明らかに.NETの "FileSystemWatcher"がWin98で動作していない/サポートされていないことです。私のポイントは何ですか?おそらく、これには簡単な解決策はなく、自分で何かを考え出す必要があります。

2

Win95からすべてのバージョンのWinXPで動作すると主張するサンプルがあります。 Win98の下でVB5で開発されました。文書化されていないSHChangeNotify *関数を使用してください。

SHChangeNotifyRegister: Receive Shell Change Notifications

SHChangeNotifyRegister Function SHChangeNotifyDeregister Function

別の解決策はここにReadDirectoryChangesWを使用してあります。

VB6 WinAPI ReadDirectoryChangesW(ヤン・コック・ワウから5番目の投稿を確認してください)

関連する問題