使用URLForDirectory而不是FSFindFolder定位Mac OS X文件夹

Per*_*nce 7 macos cocoa macos-carbon nsfilemanager

我有一些旧代码使用旧的FSFindFolder例程查找特定文件夹.现在我的任务是使代码现代化.起初使用NSFileManagerURLForDirectory似乎是正确的选择.不幸的是,我发现了很多,你可以找到使用文件夹的FSFindFolder不再受支持URLForDirectory.

您可以使用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
Run Code Online (Sandbox Code Playgroud)

我的问题:有没有一种标准方法可以在不使用FSFindFolder的情况下找到标记为"不可用"的每个文件夹的路径?

Ber*_*ter 1

我将不再使用遗留文档来获取常量的定义FSFindFolder。我会尽我所能对它们的映射方式做出有根据的猜测,所以如果我错了,请澄清,我会更新我的答案。

[NSFilemanager URLForDirectory:inDomain:appropriateForURL:create:error:]文档)可以帮助您找到其中一些项目。它可以找到:

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
Run Code Online (Sandbox Code Playgroud)

在用户、本地、网络和系统域中。

那应该照顾一下kTrashFolderType

据我所知,kSystemFolderType它将始终是System根目录中的文件夹(例如/System),因此您不必搜索它。kPreferencesFolderType指定系统文件夹中的首选项文件夹。我不确定这意味着什么,因为 中没有“首选项”文件夹,但是/System/Library一个文件夹/Library/Preferences。这也是一个静态位置。

不确定kAudioComponentsFolderTypekVolumeRootFolderType和 是kSharedUserDataFolderTypeNo即兴的。