هل هناك غلاف مكتبة objc جيد لأحداث نظام الملفات/kqueue الذي يتعامل مع المشاهدة العودية بالنسبة لي؟
-
12-11-2019 - |
سؤال
أريد أن أكتب تطبيق OSX (Snow Leopard) الذي يتلقى إشعارات عند تغيير الملفات الموجودة في دليل معين، وأريد الوصول إلى مسار الملف المحدد الذي تم تغييره.
أعلم أنه يمكنني القيام بذلك باستخدام أي منهما File System Events
أو kqueue
.لا يقدم الأول تفاصيل الملف المحدد الذي تم تغييره (يتطلب مني إنشاء لقطة للدليل الذي أشاهده ثم مسحه ضوئيًا لمعرفة الملف الذي تم تغييره).هذا الأخير لا يدعم المشاهدة العودية (يتطلب مني إضافة ساعات بشكل متكرر إلى كل ملف ودليل داخل الدليل الأصلي).
لقد بحثت عن المكتبات التي تتعامل مع متعة اللقطة/التكرار بالنسبة لي، لكن لم أتمكن من العثور على أي منها. UKKQueue
يبدو وكأنه غلاف جيد للمستوى المنخفض kqueue
الأشياء، ولكن لا يبدو أن تفعل العودية.الشيء نفسه بالنسبة ل GTMFileSystemKQueue
. SCEvents
يبدو وكأنه غلاف جيد ل File System Events
ولكن لا يبدو أنه يتعامل مع اكتشاف الملف المحدد الذي تغير.
هل هناك مكتبة تفعل ما أريد ومناسبة لمشروع objc لأي من هذه التقنيات؟
المحلول
انتهى بي الأمر باستخدام GTMFileSystemKQueue
بعد أن اكتشفت مدى سهولة التكرار بشكل متكرر عبر دليل في 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:)];
}