gpt4 book ai didi

cocoa - 保存文件后文件监视器停止

转载 作者:行者123 更新时间:2023-12-03 17:32:22 25 4
gpt4 key购买 nike

我正在尝试通过名为 UKKQueue 的包装器使用 kqueue 监控单个文件的版本 here 。这个包装器非常简单,这是我正在使用的测试代码:

@implementation FileMonitorTestAppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
fileWatcher = [[UKKQueue alloc] init];
[fileWatcher addPath:@"/Users/bruno/Desktop/SyncTestLog"];
[fileWatcher setDelegate:self];
}

- (void)dealloc {
[fileWatcher release];
}

-(void) watcher: (id<UKFileWatcher>)kq receivedNotification: (NSString*)nm forPath: (NSString*)fpath {
NSLog(@"UKFileWatcher: %@ - notification: %@ - filePath: %@", kq, nm, fpath);
}

@end

/Users/bruno/Desktop/SyncTestLog 中的文件是纯文本文件。当我从终端使用 nano 编辑它时,输出按预期显示:

2011-08-17 11:46:27.316 FileMonitorTest[1235:707] UKFileWatcher: <UKKQueue: 0x100117da0> - notification: UKKQueueFileWrittenToNotification - filePath: /Users/bruno/Desktop/SyncTestLog
2011-08-17 11:46:27.317 FileMonitorTest[1235:707] UKFileWatcher: <UKKQueue: 0x100117da0> - notification: UKKQueueFileSizeIncreasedNotification - filePath: /Users/bruno/Desktop/SyncTestLog
2011-08-17 11:46:27.751 FileMonitorTest[1235:707] UKFileWatcher: <UKKQueue: 0x100117da0> - notification: UKKQueueFileAttributesChangedNotification - filePath: /Users/bruno/Desktop/SyncTestLog

现在,当我使用 TextEdit 或 TextWrangler 编辑它时,监控会在我第一次保存文件后停止报告更改。这是最近报告的事件:

2011-08-17 10:57:45.792 FileMonitorTest[897:707] UKFileWatcher: <UKKQueue: 0x10035ae10> - notification: UKKQueueFileAttributesChangedNotification - filePath: /Users/bruno/Desktop/SyncTestLog
2011-08-17 10:57:46.463 FileMonitorTest[897:707] UKFileWatcher: <UKKQueue: 0x10035ae10> - notification: UKKQueueFileAttributesChangedNotification - filePath: /Users/bruno/Desktop/SyncTestLog
2011-08-17 10:57:54.043 FileMonitorTest[897:707] UKFileWatcher: <UKKQueue: 0x10035ae10> - notification: UKKQueueFileDeletedNotification - filePath: /Users/bruno/Desktop/SyncTestLog

据我了解,UKKQueue 获取一个类似 UNIX 的文件描述符 open()使用标志O_EVTONLY。由于某种原因,TextEdit(和 TextWrangler)在保存文件时生成此 UKKQueueFileDeletedNotification 通知。

我需要的是“永远”继续监听文件中的更改。我想当 UKKQueueFileDeletedNotification 到达时我可以重新创建监视器,但我正在寻找更干净的东西。

谢谢

编辑:我刚刚在 Google Toolbox For Mac 中找到了一个名为 GTMFileSystemKQueue 的类这解决了我的问题。我的问题仍然没有答案。

最佳答案

我用现代 Objective-C 重写了 UKKQueue。新类的工作方式相同,只是更好、更快、更精简。它还修复了本文中描述的错误以及其他几个错误。

您可以在此处找到新类 VDKQueue:http://github.com/bdkjones/VDKQueue

关于cocoa - 保存文件后文件监视器停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7095282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com