7

古い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

私の質問: FSFindFolderを使用せずに、「使用不可」とマークされた各フォルダーへのパスを見つける標準的な方法はありますか?

4

2 に答える 2

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:...with してから、パス コンポーネントとしてNSUserDirectory追加します@"Shared"

kAudioComponentsFolderType: Component Manager は非推奨です。Appleは、正確な代替品はないと言っていますが、いくつかの目的ではAudio Component Servicesが適切です。

于 2013-10-19T11:06:08.677 に答える
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

ユーザー、ローカル、ネットワーク、およびシステム ドメイン内。

それは世話をする必要がありkTrashFolderTypeます。

私が知る限り、kSystemFolderType常にSystemルート ディレクトリ (例) のフォルダーになる/Systemため、検索する必要はありません。kPreferencesFolderTypeSystem Folder 内の Preferences フォルダを指定します。に「設定」フォルダーがないため、これが何を意味するのかわかりませんが、フォルダーに/System/Libraryフォルダーがあります。これも静的な場所です。/Library/Preferences

kAudioComponentsFolderTypekVolumeRootFolderType、オフハンドについては不明kSharedUserDataFolderTypeNoです。

于 2013-10-19T04:26:33.987 に答える