#ios #objective-c #macos #cocoa
Вопрос:
В разрабатываемом мной расширении ядра низкого уровня я сталкиваюсь с путями к файлам, когда они собираются быть созданы/удалены/перемещены и т. Д. Например:
NSString *filePath = @"/Users/myuser/Documents/Work/SomeDocument.rtfd/IMG_1287.HEIC";
представляет собой изображение в документе «SomeDocument.rtfd», хранящееся в его пакете.
Я хочу знать
- BOOL isPathWithinPackage (здесь == ДА)
- NSString *packagePathForFilePath: (здесь должен вернуться для пути к файлу @»/Пользователи/мой пользователь/Документы/Работа/SomeDocument.rtfd»
- мы не можем предположить, что путь к файлу существует
- мы не можем делать слишком много вычислений.
Когда файл существует, у меня есть неудобное решение:
NSWorkspace *wm = [NSWorkspace sharedWorkspace];
NSString *packagePath = filePath;
while (packagePath.length > 0 amp;amp;
![[packagePath lastPathComponent] isEqualToString:@"/"] amp;amp;
![wm isFilePackageAtPath:packagePath])
packagePath = [packagePath stringByDeletingLastPathComponent];
NSString *packageDir = nil;
if (![[packagePath lastPathComponent] isEqualToString:@"/"])
packageDir = [packagePath stringByDeletingLastPathComponent];
else
packageDir = [destPath stringByDeletingLastPathComponent];
if (packageDir == 0)
packageDir = @"Unknown Destination";
Это довольно неэффективно, итеративно используя [wm isFilePackageAtPath:] и, конечно, не будет работать с несуществующими файлами.
Любой намек будет высоко оценен.