在Mac中观察文件打开

时间:2014-03-19 15:12:37

标签: objective-c observers

我想问一下是否可以观察Mac中打开的文件。

目前我正在观察使用FileSystemMonitor类创建,修改或删除的文件。

欢迎任何帮助

修改

这就是我现在所拥有的: 使用此代码,我可以监视所需文件夹中的文件的更新,插入和删除。但我无法监控文件的打开。

#import "FileSystemMonitor.h"

#include <CoreServices/CoreServices.h>

@implementation FileSystemMonitor

FSEventStreamRef stream;
NSFileManager *fileManager;
dispatch_queue_t dispatchEventQueue;

- (id)initWithPathsToWatch: (NSArray *) pathsToWatch
                eventQueue: (dispatch_queue_t) eventQueue{
    self = [super init];

    if (self)
    {
        fileManager = [NSFileManager defaultManager];

        dispatchEventQueue = eventQueue;

        void *selfPointer = (__bridge void *)self;
        FSEventStreamContext context = {0, selfPointer, NULL, NULL, NULL};
        NSTimeInterval latency = 3.0;

        stream = FSEventStreamCreate(NULL,
                                     &fsevents_callback,
                                     &context,
                                     (__bridge CFArrayRef) pathsToWatch,
                                     kFSEventStreamEventIdSinceNow,
                                     (CFAbsoluteTime) latency,
                                     kFSEventStreamCreateFlagFileEvents
                                     );

        FSEventStreamScheduleWithRunLoop(stream,
                                         CFRunLoopGetCurrent(),
                                         kCFRunLoopDefaultMode);
        FSEventStreamStart(stream);
    }

    return self;
}

void fsevents_callback(ConstFSEventStreamRef streamRef,
                       void *userData,
                       size_t numEvents,
                       void *eventPaths,
                       const FSEventStreamEventFlags eventFlags[],
                       const FSEventStreamEventId eventIds[])
{


    char **paths = (char**)eventPaths;
    //Here we do whatever we want to do with the events
}

也不知道是否会有所帮助,但是当我想获取文件上次修改的日期时,我需要使用以下代码:

NSDictionary* fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:fullPath error:nil];
NSDate* lastUpdate = [fileAttributes objectForKey:@"NSFileModificationDate"];

当想要获得文件的最后一次打开时:

MDItemRef item = MDItemCreate(NULL, (__bridge CFStringRef)fullPath); 
NSDate *lastOpened = (NSDate*)CFBridgingRelease(MDItemCopyAttribute(item, kMDItemLastUsedDate)); 
CFRelease(item);

因此,为了读取文件的最后一个开放日期,我需要使用MDItem类。也许这就是为什么我无法监控已打开的文件

0 个答案:

没有答案