2010-06-22 44 views
0

使用此代码我试图从fsRefAEDesc获取const char * pathPtr中的路径。如果fsRefAEDesc中的文件名中没有特殊字符,它会给出正确的名称和路径。现在,如果path有一些特殊字符/Users/XYZ/.rtf,我没有从AEGetDescData()中得到正确的fsRef。我相信它与Encoding有一些关系,并尝试了一些它们,但可以使它工作。无法读取FSRef中具有特殊字符的路径

FSRef fsRef; 
//AEDesc fsRefAEDesc; //comes from some where. 

status = AEGetDescData(&fsRefAEDesc, (void*)(&fsRef), sizeof(FSRef)); 
//OSErr result = FSMakeFSRefUnicode(&fsRef, 1024, (UniCharPtr)(&fsRef), kTextEncodingUnknown, &fileRef); 
AEDisposeDesc(&fsRefAEDesc); 

CFURLRef* gotURLRef = CFURLCreateFromFSRef(NULL, &fsRef); 
CFStringRef macPath = CFURLCopyFileSystemPath(gotURLRef, kCFURLPOSIXPathStyle); 

const char *pathPtr = CFStringGetCStringPtr(macPath, CFStringGetSystemEncoding()); 

是否有任何方法可以读取这些路径?

回答

1

您的代码在什么时候会出现问题?例如,如果插入CFShow(macPath),您是否在调试日志中看到正确的路径?如果是这样,那么你没有通过正确的编码CFStringGetCStringPtr。使用UTF-8。

+0

感谢JWWalker,我没有看到正确的路径,当我尝试这个macPath.Also试图这为gotURLRef,但我得到了相同的我的控制台 即“/用户/ Manish /桌面/ \ u27a4 \ u00a9 \ u261a巴纽”。我相信我从AEGetDescData(&fsRefAEDesc,(void *)(&fsRef),sizeof(FSRef))获得的FSRef不是Unicode。有什么方法可以让我们获得正确的FSRef。除了FSMakeFSRefUnicode()?我没有任何其他方式将其转换为unicode,因为它不适合我。让我知道是否有任何方法可以这样做。 谢谢, M – Manish 2010-06-23 05:52:43

+1

它可能是该URL包含正确的字符,但Unicode转义正在添加显示在日志中。 FSRef是一个文件引用,而不是文件名。 FSRef不是问题。 – JWWalker 2010-06-23 06:45:01

0

也试过这样的gotURLRef但我 得到了我的控制台上的相同,即 “/Users/Manish/Desktop/\u27a4\u00a9\u261a.png”

Unicode转义序列在通过CFURL调用时会得到什么。网址非常有效,范围在limited character之间。您可以试试FSRefMakePath。它会从FSRef获得UTF8编码路径。