Detectar se o conteúdo de uma pasta mudaram?
-
06-07-2019 - |
Pergunta
Condições:
- Windows 98 SE
- WMI não está disponível
Eu tenho o código que se parece com isso, escrito usando o meu embrulho esteróide 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
Há um monte de atividade do disco com essa chamada para files.collectfiles. Existe alguma maneira de detectar uma mudança no conteúdo de uma pasta sem realmente a digitalização da pasta para arquivos?
Solução
Definir "mudança no conteúdo de uma pasta".
Se isso significa que um arquivo foi adicionado, excluído ou renomeado, então o timestamp modificado da pasta é atualizado sempre que tal evento ocorrer.
Se você está querendo, em vez de saber quando os arquivos são modificados, então você vai precisar para lê-los.
Isso disse, olhando para o que você está tentando fazer (digitalizar uma pasta para novos arquivos .usv, e processá-los e excluí-los), então é só acompanhar o timestamp na pasta e atualizá-lo para a direita antes de chamar collectfiles é melhor (nota que o momento correto de log é apenas antes de chamar collectfiles, caso contrário você corre o risco de não acordar se um arquivo é adicionado durante os collectfiles ligar ou imediatamente depois).
Outras dicas
Há uma amostra que diz trabalhar em todas as versões de Win95 até em leas WinXP. Desenvolvido sob Win98 com VB5. Usando os (links então? Prestados ao docu abaixo) indocumentados SHChangeNotify * Funciona.
SHChangeNotifyRegister: Receba Shell notificações de alteração
SHChangeNotifyRegister Função SHChangeNotifyDeregister Função
Não há outra solução usando ReadDirectoryChangesW aqui:
VB6 WinAPI ReadDirectoryChangesW (verifique o quinto posto de Yang Kok Wah)
Você pediu para algo em VB e em execução no win98 e eu não tenho resposta para isso, mas MS tem exemplo ac / win32 sobre como conseguir isso em Windows2000 + com FindFirstChangeNotification . Outra coisa é que, aparentemente, " FileSystemWatcher " em .NET não está funcionando / suportada em Win98. Qual é o meu ponto? Há talvez há uma solução fácil para isso e você tem que vir com algo em seu próprio país.