Existe um bom wrapper de biblioteca objc para eventos do sistema de arquivos/kqueue que lida com a observação recursiva para mim?
-
12-11-2019 - |
Pergunta
Quero escrever um aplicativo OSX (Snow Leopard) que receba notificações quando arquivos em um diretório específico forem alterados e quero acessar o caminho do arquivo específico que foi alterado.
Eu sei que posso fazer isso usando File System Events
ou kqueue
.O primeiro não fornece detalhes de qual arquivo específico foi alterado (exigindo que eu crie um instantâneo do diretório que estou monitorando e depois verifique-o para descobrir qual arquivo foi alterado).Este último não suporta observação recursiva (exigindo que eu adicione recursivamente observações a cada arquivo e diretório dentro do diretório pai).
Procurei bibliotecas que lidam com a diversão de instantâneo/recursão para mim, mas não consigo encontrar nenhuma. UKKQueue
parece um bom invólucro para o nível baixo kqueue
coisas, mas não parece fazer recursão.O mesmo para GTMFileSystemKQueue
. SCEvents
parece um bom invólucro para File System Events
mas parece não conseguir descobrir o arquivo específico que foi alterado.
Existe uma biblioteca que faça o que eu quero e seja adequada para um projeto objc para qualquer uma dessas tecnologias?
Solução
acabei usando GTMFileSystemKQueue
depois que descobri como é fácil iterar recursivamente em um diretório no objc:
// Create a directory enumerator for the given top level directory
NSDirectoryEnumerator *de = [[NSFileManager defaultManager] enumeratorAtPath:dir];
// Add a kqueue on every file and folder below the top level
NSString *file;
while ((file = [de nextObject])) {
[[GTMFileSystemKQueue alloc] initWithPath:[dir stringByAppendingString:file]
forEvents:kGTMFileSystemKQueueAllEvents
acrossReplace:YES
target:self
action:@selector(fileSystemKQueue:events:)];
}