2013-10-16 76 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代码。 –

相关问题