2010-06-22 45 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編碼路徑。