我需要帮助静音不推荐使用:FSPathMakeRef
,FSIsAliasFile
,
FSResolveAliasFileWithMountFlags
,FSRefMakePath
。
任何帮助将不胜感激。
// 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);
答案 0 :(得分:2)
现代方法是使用NSURL
来表示文件位置。因此,您将不得不替换FSRef
的所有用途。 (也就是说,如果您希望将FSPathMakeRef()
替换为另外的FSRef
函数,那么您会感到失望。)
因此,您使用FSPathMakeRef()
或+[NSURL fileURLWithPath:]
加+alloc
代替-[NSURL initFileURLWithPath:]
。
要替换FSIsAliasFile()
,您可以使用-[NSWorkspace typeOfFile:error:]
获取该类型,然后使用-[NSWorkspace type:conformsToType:]
与kUTTypeAliasFile
进行核对。
要替换FSResolveAliasFileWithMountFlags()
,请使用NSURL
的“书签数据”功能。首先使用+bookmarkDataWithContentsOfURL:error:
从文件中获取书签数据,然后使用+URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error:
解析它。
您不需要替换CFURLCreateFromFSRef()
,因为您已经拥有NSURL
。
答案 1 :(得分:0)
问题是FSIsAliasFile()仍然比
快3.7NSString *type = [workspace typeOfFile:filePath error:nil];
return [type isEqualToString:@"com.apple.alias-file"];
我也是,我想替换过时的FSIsAliasFile()API,但要扫描数百万个文件,这将是一个痛苦。你知道更快的方式吗?