Rileva se il contenuto di una cartella è cambiato?
-
06-07-2019 - |
Domanda
Condizioni:
- Windows 98 SE
- WMI non disponibile
Ho un codice simile a questo, scritto usando il mio wrapping steroideo di VBScript usando MSScript.
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
C'è molta attività su disco con quella chiamata a files.collectfiles. Esiste un modo per rilevare una modifica nel contenuto di una cartella senza effettivamente scansionare la cartella alla ricerca di file?
Soluzione
Definisci " modifica nel contenuto di una cartella " ;.
Se significa che un file è stato aggiunto, eliminato o rinominato, il timestamp modificato della cartella viene aggiornato ogni volta che si verifica un evento del genere.
Se invece vuoi sapere quando i file vengono modificati, dovrai leggerli.
Detto questo, guardando cosa stai cercando di fare (scansiona una cartella alla ricerca di nuovi file .usv, elaborali ed eliminali), quindi tieni semplicemente traccia del timestamp sulla cartella e aggiornalo subito prima di chiamare collectfiles è il migliore (si noti che il momento giusto per accedere è solo PRIMA di chiamare collectfile, altrimenti si corre il rischio di non svegliarsi se un file viene aggiunto durante la chiamata di collectfiles o immediatamente dopo).
Altri suggerimenti
Esiste un esempio che afferma di funzionare su tutte le versioni da Win95 fino a WinXP. Sviluppato sotto Win98 con VB5. Utilizzando le funzioni (quindi? Fornite nel seguente documento) SHChangeNotify * non documentato.
SHChangeNotifyRegister: Ricevi notifiche di modifica shell
SHChangeNotifyRegister Function SHChangeNotifyDeregister Function
Esiste un'altra soluzione che utilizza ReadDirectoryChangesW qui:
VB6 WinAPI ReadDirectoryChangesW (controlla il quinto post da Yang Kok Wah)
Hai specificamente richiesto qualcosa in VB e funzionante su win98 e non ho una risposta per questo, ma MS ha un esempio ac / win32 su come ottenere questo risultato su Windows 2000 + con FindFirstChangeNotification . Un'altra cosa è che apparentemente " FileSystemWatcher " in .NET non funziona / supportato su Win98. Qual è il mio punto? Forse non esiste una soluzione semplice per questo e devi inventarti qualcosa da solo.