Учитывая путь к файлу (не обязательно существующий файл), как я могу узнать, находится ли файл в пакете, и путь к пакету?

#ios #objective-c #macos #cocoa

Вопрос:

В разрабатываемом мной расширении ядра низкого уровня я сталкиваюсь с путями к файлам, когда они собираются быть созданы/удалены/перемещены и т. Д. Например:

 NSString *filePath = @"/Users/myuser/Documents/Work/SomeDocument.rtfd/IMG_1287.HEIC";
 

представляет собой изображение в документе «SomeDocument.rtfd», хранящееся в его пакете.

Я хочу знать

  1. BOOL isPathWithinPackage (здесь == ДА)
  2. 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:] и, конечно, не будет работать с несуществующими файлами.

Любой намек будет высоко оценен.