如何获取Finder边栏收藏内容可可?

时间:2012-05-25 08:41:31

标签: macos cocoa finder

我需要获取Finder侧栏的“收藏夹”部分中显示的对象路径(对于当前用户)。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:3)

本身没有Cocoa API。您将使用LSSharedFileList API。 API是公共的,但唯一的文档是头文件/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Headers/LSSharedFileList.h。您需要kLSSharedFileListFavoriteItems(可能是kLSSharedFileListFavoriteVolumes)列表类型。

答案 1 :(得分:3)

获取共享文件列表只是第一部分,您仍然可能希望获得包含路径的实际字符串对象。这是一个小代码片段,可让您在取景器侧边栏的收藏夹部分中获取每个对象的路径。

UInt32 seed;
LSSharedFileListRef sflRef = LSSharedFileListCreate(NULL,
                                                    kLSSharedFileListFavoriteItems,
                                                    NULL);
CFArrayRef items = LSSharedFileListCopySnapshot( sflRef, &seed );
for( size_t i = 0; i < CFArrayGetCount(items); i++ )
{
    LSSharedFileListItemRef item = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(items, i);
    if( !item )
        continue;
    CFURLRef outURL = NULL;
    LSSharedFileListItemResolve( item, kLSSharedFileListNoUserInteraction, (CFURLRef*) &outURL, NULL );
    if( !outURL )
        continue;
    //The actual path string of the item
    CFStringRef itemPath = CFURLCopyFileSystemPath(outURL,kCFURLPOSIXPathStyle);
    // TODO: Do whatever you want to do with your path here!!!!
    CFRelease(outURL);
    CFRelease(itemPath);
}
CFRelease(items);
CFRelease(sflRef);

答案 2 :(得分:2)

使用LSSharedFileList API(LaunchServices / LSSharedFileList.h。)

 LSSharedFileListRef favoriteItems = LSSharedFileListCreate(NULL,
                                                            kLSSharedFileListFavoriteItems, NULL);