Работа с файлом по пути / URI с использованием Finder + ScriptingBridge - PullRequest
1 голос
/ 12 июля 2010

Я использую сгенерированные заголовки Finder.h из утилиты sdef, и кажется, что многие методы Finder SB требуют, чтобы объекты типа FinderItem делали что-либо значимое.

Как бы я мог создать один из этих объектов на основе пути к файлу URI или URI?

Самым дальним, что у меня есть, является метод [SBObject initWithProperties], кратко упомянутый вРуководство СБ, но понятия не имею, куда идти оттуда.Основной AppleScript, который я хотел бы перевести на Objective-C, это, если выразиться еще одним способом:

set myFile to POSIX file 
  "/untitled folder/funneh/keyboardcat.mov" 

Ответы [ 3 ]

2 голосов
/ 12 июля 2010

Если вам просто нужен объект FinderItem, то код slf будет работать, если вы измените строку:

NSURL* theFileURL = [pathString fileURLWithPath:pathString];

на

NSURL* theFileURL = [NSURL fileURLWithPath:pathString];

Но если вы хотите путь в стиле HFSзатем я нашел этот фрагмент.

NSString* path = [(NSString*)CFURLCopyFileSystemPath((CFURLRef)theFileURL, kCFURLHFSPathStyle) autorelease];
 NSLog(@"path= %@",path);

, который возвращает строку «Жесткий диск: папка без названия: funneh: keyboardcat.mov»

Фрагмент можно найти здесь .

1 голос
/ 12 июля 2010

Я не уверен насчет SBObject, но если вы хотите FinderItem*, это то, как вы могли бы получить.

NSString* pathString = [@"/untitled folder/funneh/keyboardcat.mov" stringByExpandingTildeInPath];
NSURL* theFileURL = [pathString fileURLWithPath:pathString];
FinderApplication* finder = [SBApplication applicationWithBundleIdentifier:@"com.apple.finder"];
FinderItem * theItem = [[finder items] objectAtLocation: theFileURL];
0 голосов
/ 18 июля 2010

Прочитав очень подробный ответ, связанный с AppleScript, я решил придерживаться appscript , что значительно упростило задачу:

FNApplication *finder = [[FNApplication alloc] initWithName:@"Finder.app"];
FNReference *ref = [[finder files] byName: @"/users/movies/kitteh.mov"];
...