我想问一下是否可以观察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类。也许这就是为什么我无法监控已打开的文件