2013-10-16 113 views
5

我有一些舊代碼可以使用舊的FSFindFolder例程找到特定的文件夾。 現在我有了更新這段代碼的任務。 最初使用NSFileManagerURLForDirectory看起來是正確的選擇。 不幸的是,我發現很多您可以使用FSFindFolder找到的文件夾不再受URLForDirectory的支持。使用URLForDirectory而不是FSFindFolder找到Mac OS X文件夾

您可以使用的文件夾列表FSFindFolder很長,其中大部分對我無用。

這裏是FSFindFolder常數的部分名單,我確實需要轉換及其URLForDirectory當量:

FSFindFolder     URLForDirectory 
============================== =============== 
kDesktopFolderType    NSDesktopDirectory 
kCachedDataFolderType   NSCachesDirectory 
kApplicationSupportFolderType NSApplicationSupportDirectory 
kTemporaryFolderType   located by calling NSTemporaryDirectory() 
kCurrentUserFolderType   located by calling NSHomeDirectory() 
kSystemFolderType    Not Available 
kPreferencesFolderType   Not Available 
kTrashFolderType    Not Available 
kAudioComponentsFolderType  Not Available 
kVolumeRootFolderType   Not Available 
kSharedUserDataFolderTypeNo  Not Available 

我的問題:有沒有定位到每一個文件夾的路徑的標準方法標記爲「不可用」,不使用FSFindFolder

+0

請點擊此鏈接http://stackoverflow.com/questions/18683345/cycle-through-a-directory-and-get-paths-of-all-the-files-and-folders/18688333#18688333 –

+0

@hussain -habhabbir問題18683345是關於瀏覽文件夾中的文件 - 它與我的問題無關。我的問題是關於查找特定的文件夾。 –

+0

你能否請你多解釋一下你想達到的目標。我的意思是你需要輸出什麼? –

回答

1

對於FSFindFolder常數的定義,我要走legacy documentation。我會盡我所能對他們的地圖進行教育性猜測,所以如果我錯了,請澄清一下,我會更新我的答案。

[NSFilemanager URLForDirectory:inDomain:appropriateForURL:create:error:]documentation)可以幫助您找到這些項目中的一部分。它可以找到:

NSApplicationDirectory 
NSDemoApplicationDirectory 
NSDeveloperApplicationDirectory 
NSAdminApplicationDirectory 
NSLibraryDirectory 
NSDeveloperDirectory 
NSUserDirectory 
NSDocumentationDirectory 
NSDocumentDirectory 
NSCoreServiceDirectory 
NSAutosavedInformationDirectory 
NSDesktopDirectory 
NSCachesDirectory 
NSApplicationSupportDirectory 
NSDownloadsDirectory 
NSInputMethodsDirectory 
NSMoviesDirectory 
NSMusicDirectory 
NSPicturesDirectory 
NSPrinterDescriptionDirectory 
NSSharedPublicDirectory 
NSPreferencePanesDirectory 
NSApplicationScriptsDirectory 
NSItemReplacementDirectory 
NSAllApplicationsDirectory 
NSAllLibrariesDirectory 
NSTrashDirectory 

在用戶,本地,網絡和系統域。

這應該照顧kTrashFolderType

據我所知,kSystemFolderType將始終是根目錄中的System文件夾(例如/System),因此您不必搜索它。 kPreferencesFolderType指定系統文件夾中的首選項文件夾。我不確定這是什麼意思,因爲/System/Library中沒有「首選項」文件夾,但,但是文件夾爲/Library/Preferences。這也是一個靜態位置。

不確定關於kAudioComponentsFolderType,kVolumeRootFolderTypekSharedUserDataFolderTypeNo副手。

3

我會建議在大多數情況下,現代化代碼將意味着從首先使用這些文件夾位置的任何地方移開。例如,在現代代碼中,對於kSystemFolderType等價物沒有多少合法用途。你應該檢查你正在使用的每個案例,並詢問正確的解決方案是如何解決舊實施解決的高層次問題。

如果你真的需要路徑,其中一些文件夾,最好的辦法是看路徑FSFindFolder()給人,發現這NSSearchPathDirectory讓你最接近的,然後就從URLForDirectory:...編寫代碼來獲取和追加作爲靜態相對路徑的差異。

一些具體建議:

kPreferencesFolderType:使用NSUserDefaults存儲偏好;存儲非默認值在應用支持

kTrashFolderType:使用-[NSWorkspace recycleURLs:completionHandler:]-performFileOperation:source:destination:files:tag:NSWorkspaceRecycleOperation;僅在必要時,使用-[NSFileManager URLForDirectory:...]NSTrashDirectory

kVolumeRootFolderType:如果你使用這種具有特定體積裁判,而不是一個域,使用-[NSURL getResourceValue:forKey:error:]與關鍵NSURLVolumeURLKey

kSharedUserDataFolderType-URLForDirectory:...NSUserDirectory然後追加@"Shared"作爲路徑組件

kAudioComponentsFolderType:組件管理器已棄用;蘋果says沒有確切的替代品,但對於某些用途Audio Component Services是適當的。

+1

「蘋果說...」對我來說已經不夠好了。我需要標準的文件夾位置才能保持一致。從以前的文件夾位置移開意味着我的用戶也從後向兼容轉移。我有過去15年左右的用戶一直將他們的偏好保存到〜/ Library/Preferences文件夾中。最近,Apple有了一個新的曲調,其中Preferences文件夾不能直接訪問。 OTOH恐怕FSFindFolder在未來的系統中不會被支持,所以想要使用現代的Cocoa代碼。 –

相關問題