Détecter si le contenu d'un dossier a changé?
-
06-07-2019 - |
Question
Conditions:
- Windows 98 SE
- WMI non disponible
J'ai un code qui ressemble à ceci, écrit en utilisant mon habillage stéroïdien de VBScript en utilisant 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
Cet appel à files.collectfiles est très actif sur le disque. Existe-t-il un moyen de détecter une modification du contenu d'un dossier sans analyser le dossier à la recherche de fichiers?
La solution
Définir "changement dans le contenu d'un dossier".
Si cela signifie qu'un fichier a été ajouté, supprimé ou renommé, l'horodatage modifié du dossier est mis à jour chaque fois qu'un tel événement se produit.
Si vous souhaitez plutôt savoir quand les fichiers sont modifiés, vous devez les lire.
Cela dit, regardez ce que vous essayez de faire (recherchez les nouveaux fichiers .usv dans un dossier, puis traitez-les et supprimez-les), puis gardez simplement trace de l'horodatage du dossier et mettez-le à jour juste avant d'appeler. collectfiles est préférable (notez que le bon moment pour vous connecter est AVANT d'appeler collectfiles, sinon vous courez le risque de ne pas vous réveiller si un fichier est ajouté lors de l'appel collectfiles ou immédiatement après.).
Autres conseils
Il existe un exemple qui prétend fonctionner sur toutes les versions de Win95 à au moins WinXP. Développé sous Win98 avec VB5. Utilisation des fonctions SHChangeNotify * non documentées (alors fournies? Vers le document ci-dessous).
SHChangeNotifyRegister: Recevoir les notifications de modification de shell
Fonction SHChangeNotifyRegister Fonction SHChangeNotifyDeregister
Il existe une autre solution utilisant ReadDirectoryChangesW ici:
VB6 WinAPI ReadDirectoryChangesW (consultez le cinquième message de Yang Kok Wah)
Vous avez spécifiquement demandé quelque chose en VB et fonctionniez sur win98 et je n’ai pas de réponse à vous donner, mais MS a un exemple ac / win32 sur la façon de réaliser cela sous Windows 2000 + avec FindFirstChangeNotification . Une autre chose est qu'apparemment, < FileSystemWatcher " dans .NET ne fonctionne pas / pris en charge sur Win98. Quel est mon point? Il n’ya peut-être pas de solution facile à cela et vous devez trouver quelque chose par vous-même.