FSEvent(ファイルの追加、ファイルの名前変更、ファイルの削除、ファイルの変更)で監視されているフォルダー内のファイルに対するさまざまな操作を区別できるようにするために、次のことを行いました。
次のプロパティを使用してオブジェクトを作成しましたFile(を呼び出すことで、必要な数だけ取得できますattributesOfItemAtPath:error:)。
@property (strong) NSString *name;
@property (strong) NSString *type;
@property (strong) NSDate *creationDate;
@property (strong) NSDate *modificationDate;
@property (strong) NSString *hash;
@property (strong) NSString *path;
NSMutableArray次の方法で、ファイルオブジェクトを設定できます。
NSMutableArray *files = [[NSMutableArray alloc] init];
NSString *dirPath = //directory you are watching
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *theFiles =  [fileManager contentsOfDirectoryAtURL:[NSURL fileURLWithPath:dirPath]
                                includingPropertiesForKeys:[NSArray arrayWithObject:NSURLNameKey]
                                                   options:NSDirectoryEnumerationSkipsHiddenFiles
                                                     error:nil];
NSArray* fileNames = [theFiles valueForKeyPath:@"lastPathComponent"];
if ( [fileNames count] > 0 ) {
    for (NSInteger i=0; i<[fileNames count]; i=i+1) {
        NSString *currentPath = [dirPath stringByAppendingString:[fileNames objectAtIndex:i]];
        NSError *error;
        NSDictionary *fileInfo = [fileManager attributesOfItemAtPath:currentPath error:&error];
        File *currentFile = [[File alloc] initWithName:[fileNames objectAtIndex:i]
                                                  withType:fileInfo.fileType
                                                  withPath:currentPath
                                                  withHash: //get file hash
                                          withCreationDate:fileInfo.fileCreationDate
                                   andWithModificationDate:fileInfo.fileModificationDate];
        [files addObject:currentFile];
}
ディレクトリにサブフォルダが含まれている場合は、すべてのサブフォルダに対してこのプロセスを繰り返し、Fileオブジェクトの配列を返すだけで十分です。
実行された操作を理解するには、のコールバック(に保存)の前(に保存NSMutableArray *oldSnap)と後に収集された(に保存)情報に直面するだけで十分です。最初にファイルとファイルを対峙させ、次にその逆を行う必要があります。NSMutableArray *newSnapFSEventoldSnapnewSnap
oldSnapに欠落している特定の名前のファイルがある場合は、newSnapこのファイルが削除されたか、名前が変更されたことを意味します。に同じハッシュを持つファイルがある場合newSnap、ファイルの名前は変更されています。それ以外の場合は、フォルダから削除されています。
比較を終えると、に同じ名前のファイルnewSnapとは異なるファイルがある場合、このファイルは変更されています。に欠落しているファイルがnewSnapにある場合、このファイルは新しく追加されたファイルです。fileModificationDateoldSnapoldSnap
ファイルの名前変更と変更の両方に関する解決策はまだ思いつきません。この答えが他の人の助けになることを願っています!