¿Detecta si el contenido de una carpeta ha cambiado?
-
06-07-2019 - |
Pregunta
Condiciones:
- Windows 98 SE
- WMI no disponible
Tengo un código que se ve así, escrito usando mi envoltura esteroide de 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
Hay mucha actividad de disco con esa llamada a files.collectfiles. ¿Hay alguna forma de detectar un cambio en el contenido de una carpeta sin escanear realmente la carpeta en busca de archivos?
Solución
Definir " cambio en el contenido de una carpeta " ;.
Si significa que se agregó, eliminó o renombró un archivo, la marca de tiempo modificada de la carpeta se actualiza cada vez que se produce dicho evento.
Si, por el contrario, desea saber cuándo se modifican los archivos, deberá leerlos.
Dicho esto, observando lo que estás tratando de hacer (escanea una carpeta en busca de nuevos archivos .usv, y procesalos y elimínalos), luego solo realiza un seguimiento de la marca de tiempo en la carpeta y actualízala justo antes de llamar collectfiles es lo mejor (tenga en cuenta que el momento correcto para iniciar sesión es ANTES de llamar a collectfiles, de lo contrario corre el riesgo de no despertarse si se agrega un archivo durante la llamada de collectfiles o inmediatamente después).
Otros consejos
Hay una muestra que dice funcionar en todas las versiones desde Win95 hasta al menos WinXP. Desarrollado bajo Win98 con VB5. Utilizando las funciones SHChangeNotify * indocumentadas (¿entonces? Proporcionó enlaces al documento a continuación).
SHChangeNotifyRegister: reciba notificaciones de cambio de shell
Función SHChangeNotifyRegister SHChangeNotifyDeregister Function
Hay otra solución usando ReadDirectoryChangesW aquí:
VB6 WinAPI ReadDirectoryChangesW (verifique la quinta publicación de Yang Kok Wah)
Usted solicitó específicamente algo en VB y se ejecuta en win98 y no tengo respuesta para esto, pero MS tiene un ejemplo ac / win32 sobre cómo lograr esto en Windows2000 + con FindFirstChangeNotification . Otra cosa es que aparentemente " FileSystemWatcher " en .NET no funciona / compatible con Win98. ¿Cuál es mi punto? Tal vez no haya una solución fácil para esto y tenga que encontrar algo por su cuenta.