2011-08-25 405 views
3

我可以使用NSFileManager在Mac OS X 10.5和10.6的「/ Library/Application Support」中創建XYZ文件夾。但是,在10.7中,它表示「您沒有權限將XYZ保存到'應用程序支持'文件夾中」。在Mac OS X中寫入「〜/ Library/Application Support」文件夾10.7

有誰知道我可以做什麼(例如調用哪個API)來獲得創建文件夾的權限?謝謝。

+0

什麼具體說這個?它是一個對話框嗎?您的調試器控制檯中的消息?請修改您的問題以包含屏幕截圖或信息的完整文本。 –

+0

它在調試器控制檯中。該消息的完整確切文本是「您無權在」Application Support「文件夾中保存」MacroMedia「」。我正在創建「/ Library/Application Support/MacroMedia/FlashPlayerTrust」(如果它不存在),因爲要在我的WebView中嵌入並運行本地Flash應用程序,我需要在FlashPlayerTrust中寫入一個文件,以告知Flash運行時信任Flash應用程序駐留在某個目錄中;從而授予他們在本地運行的權限。 – glendon

+1

確實你沒有。我認爲這也不適用於早期版本的操作系統,也許你是以管理員用戶身份運行,現在不是?非管理員用戶無法寫入/ Library。您將需要創建一個安裝程序包來完成此操作,否則就會花費很多時間來計算出使用授權服務以root權力執行此操作的正確方法。 –

回答

9

您是否使用沙箱?如果是這樣,你寫錯了地方。無論哪種情況,您都應該使用NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES)來找到正確的路徑,而不是對其進行硬編碼。

+0

我不使用沙箱來限制我的應用程序。路徑是正確的,但由於權限問題,我無法寫入。謝謝。 – glendon

+0

爲了相同的目的,NSFileManager提供了一個基於URL的方法。就像其基於路徑的功能表兄弟一樣,它也會解鎖返回的位置以供沙盒應用程序使用。 –

5

隨着OS X 10.6或更高版本的,推薦的API來找到用戶的應用程序支持文件夾是:

NSError *error; 
NSURL *appSupportDir = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:&error]; 

NSLog(@"%@", appSupportDir); 
// file://localhost/Users/abhi/Library/Application%20Support/ 

的路徑並不總是~/Library/Application Support。有時它在別的地方(例如,當你的應用程序在沙箱中運行時)。此外,應用程序支持目錄可能還不存在。上面的代碼將處理併爲您創建它。

如果該API返回的URL不可寫,那麼您應該將異常記錄到標準錯誤,並允許您的應用程序崩潰。這應該只發生在用戶用完磁盤空間或類似的東西(在這種情況下,它可能返回nil和一個錯誤對象)。