FindFirstChangeNotification é a melhor API a ser usada para notificação de alterações no sistema de arquivos no Windows?

StackOverflow https://stackoverflow.com/questions/16615

Pergunta

Sou novo na programação do Windows e estou tentando ser notificado sobre todas as alterações no sistema de arquivos (semelhante às informações exibidas pelo FileMon do SysInternals, mas por meio de uma API).Uma FindFirstChangeNotification para cada unidade (não-rede, não substituída) é minha melhor aposta ou existem outras APIs C/C++ mais adequadas?

Foi útil?

Solução

FindFirstChangeNotification está bem, mas para obter um pouco mais de potência final, você deve usar ReadDirectoryChangesW. (Na verdade, é até recomendado na documentação!)

Não requer um ponteiro de função, exige que você decodifique manualmente um buffer bruto, usa nomes de arquivos Unicode, mas geralmente é melhor e mais flexível.

Por outro lado, se você quiser fazer o que o FileMon faz, você provavelmente deveria fazer o que o FileMon faz e usar IFS para criar e instalar um filtro de sistema de arquivos.

Outras dicas

Existem outras maneiras de fazer isso, mas a maioria delas envolve esforço de sua parte (ou tira o desempenho do seu aplicativo, ou você precisa bloquear um thread para usá-las, etc.).FindFirstChangeNotification é um pouco complicado se você não está acostumado a lidar com ponteiros de função, etc., mas tem a virtude de fazer com que o sistema operacional faça a maior parte do trabalho para você.

Na verdade, o FileSystemWatcher funciona perfeitamente com unidades de rede compartilhadas.Estou usando-o agora em um aplicativo que, entre outras coisas, monitora alterações no sistema de arquivos.(www.tables.net).

Você pode usar a classe FileSystemWatcher.Muito eficiente, mas não funciona com unidades compartilhadas de rede.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top