2014-07-21 5 views
2
나는 침묵되지 않음에 도움이 필요

되지 현대화 수있는 방법 : FSPathMakeRef, FSIsAliasFile, FSResolveAliasFileWithMountFlags, FSRefMakePath을.
도움이 될 것입니다.내가 FSPathMakeRef, FSIsAliasFile, FSResolveAliasFileWithMountFlags, FSRefMakePath

// 1) FSPathMakeRef ** // 여기에 FSIsAliasFile 사용되지 않는

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

) * //

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

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

) 여기에 사용되지 FSResolveAliasFileWithMountFlags * 사용되지 않는 //

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

// 4) 여기 CFURLCreateFromFSRef 에게 * 현대적인 접근 방식은 파일 위치를 나타 내기 위해 NSURL의를 사용하는 것입니다 //

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

답변

2

을 추천하지 않습니다. 따라서 FSRef의 모든 용도를 바꾸어야합니다. (당신은 또한 당신에게 FSRef를 제공하는 다른 기능으로 FSPathMakeRef()을 대체하기 바라고 경우 즉, 당신은 실망하게 될 것입니다.)

그래서, 대신 FSPathMakeRef(), 당신은 +[NSURL fileURLWithPath:] 또는 +alloc 플러스 -[NSURL initFileURLWithPath:]를 사용합니다.

FSIsAliasFile()을 바꾸려면 유형을 가져 오는 데 -[NSWorkspace typeOfFile:error:]을 사용하고 kUTTypeAliasFile을 확인하려면 -[NSWorkspace type:conformsToType:]을 사용하십시오.

FSResolveAliasFileWithMountFlags()을 바꾸려면 NSURL의 "북마크 데이터"기능을 사용하십시오. 먼저 +bookmarkDataWithContentsOfURL:error:을 사용하여 파일에서 북마크 데이터를 가져온 다음 +URLByResolvingBookmarkData:options:relativeToURL:bookmarkDataIsStale:error:을 사용하여 해결하십시오.

이미 NSURL이 있으므로 CFURLCreateFromFSRef()을 대체 할 필요가 없습니다.

+0

감사합니다. Ken! 나는 당신의 접근 방식에 따라 코드를 수정할 것이다. 문제를 만난다면 나는 당신의 도움을 의지 할 수 있기를 바랍니다. 빠른 응답에 대해 특별히 감사드립니다. – sundsx

+0

문제는 FSIsAliasFile()이 3.7tantypeOfFile : error :] 더하기 – Leonardo

+0

@ Leonardo인데, 키 NSURLIsAliasFileKey를 사용하여'- [NSURL getResourceValue : forKey : error : ]'을 시도 할 수 있다는 것입니다. 그것은 UTI 접근보다 빠를 수도 있습니다. 또한 속도가 중요한 빈도로이 작업을 수행하고 있습니까? –

0

문제는 내가 구식 FSIsAliasFile() API를 대체하고 싶습니다 FSIsAliasFile()가 빠르게

너무
NSString *type = [workspace typeOfFile:filePath error:nil]; 
return [type isEqualToString:@"com.apple.alias-file"]; 

나보다 여전히 3.7이라고하지만, 검색 할 파일의 백만이는 것입니다 고통스러워. 더 빠른 길을 알고 있습니까?