cocoa - 我如何现代化已弃用的 FSPathMakeRef、FSIsAliasFile、FSResolveAliasFileWithMountFlags、FSRefMakePath

标签 cocoa nsfilemanager macos-carbon

我需要帮助来静默弃用:FSPathMakeRefFSIsAliasFileFSResolveAliasFileWithMountFlagsFSRefMakePath
任何帮助将不胜感激。

//1) 已弃用 FSPathMakeRef **//

    error = FSPathMakeRef((UInt8*)[filename fileSystemRepresentation], &ref, &isFolder);
    if (error) return NO;

//2) 此处已弃用 FSIsAliasFile *//

    error = FSIsAliasFile(&ref, &isAlias, &isFolder);
    if (error) return NO;

    if (isAlias)
    {
        if (isFolder) return YES;

//3) 此处已弃用 FSResolveAliasFileWithMountFlags *//

        error = FSResolveAliasFileWithMountFlags(&ref, true, &isFolder, &isAlias,
                                                 kARMMountVol | kARMNoUI | kARMMultVols | kARMSearch);
        if (error) return NO;
        if (isFolder) return YES;

//4) 此处已弃用 CFURLCreateFromFSRef *//

        fileURL = CFURLCreateFromFSRef(kCFAllocatorDefault, &ref);
        filepath = (NSString*)CFBridgingRelease(CFURLCopyFileSystemPath(fileURL, kCFURLPOSIXPathStyle));
        CFRelease(fileURL);

最佳答案

现代方法是使用 NSURL 来表示文件位置。因此,您将必须替换 FSRef 的所有使用。 (也就是说,如果您希望将 FSPathMakeRef() 替换为另一个也为您提供 FSRef 的函数,您将会失望。)

因此,您可以使用 +[NSURL fileURLWithPath:]+alloc-[NSURL,而不是 FSPathMakeRef() initFileURLWithPath:].

要替换 FSIsAliasFile(),您可以使用 -[NSWorkspace typeOfFile:error:] 获取类型,然后使用 -[NSWorkspace type:conformsToType: ] 对照 kUTTypeAliasFile 进行检查。

要替换 FSResolveAliasFileWithMountFlags(),您可以使用 NSURL 的“书签数据”功能。首先使用 +bookmarkDataWithContentsOfURL:error: 从文件中获取书签数据,然后使用 +URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error: 进行解析。

您不需要替换 CFURLCreateFromFSRef(),因为您已经有一个 NSURL

关于cocoa - 我如何现代化已弃用的 FSPathMakeRef、FSIsAliasFile、FSResolveAliasFileWithMountFlags、FSRefMakePath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24870288/

相关文章:

objective-c - NSN 秒数 自 时、分、秒

macos - 检查 NSView 在其 NSWindow 中是否可见

objective-c - 如何将 "normal"NSDocument 逻辑添加到修改后的基于项目的架构中?

objective-c 确定图像分辨率

Swift:如何在路径字符串中扩展波浪号

objective-c - 如何将音频数据存储到文档目录中?

objective-c - 以编程方式获取 macOS 上的硬盘驱动器信息

cocoa - Cocoa 上的 Qt 或 wxWidgets?

ios - 如何从文件目录保存和加载图像 - Swift 4

cocoa - 粘贴板管理器引用