Persistence(2)~ディレクトリパスの入手

2011. 02. 04
●Documentsディレクトリの入手

ユーザアプリケーションはインストールの度にOSが自動的にフォルダ名を割り振りますので、アプリケーション名などでパスを得ることはできません。

従ってFoundation FunctionsNSSearchPathForDirectoriesInDomainsでディレクトリを検索することになります。

ドキュメントのディレクトリを取得するには、第一引数をNSDocumentDirectoryで指定します。

第二引数の検索範囲ですが、iOSの場合サンドボックスに依るためか、NSUserDomainMaskでユーザのホームディレクトリを指定することで、当該アプリケーションが対象になるようです。

第三引数は、YESにすることでチルダを展開するもので、実機用には関係無さそうですが、シミュレータ用の対策と思われます。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

得られる配列pathsには引数による条件で検索した結果が順番に入りますが、アプリケーションのサンドボックス下にDocumentsディレクトリは1つしかないので、objectAtIndex:で0と決め打ちしてドキュメントへのパスを取得することができます。

Documentsディレクトリ下にファイルを作成、もしくはファイルを読み込む際のファイルパスは、stringByAppendingPathComponent:メソッドで作成します。


NSSearchPathForDirectoriesInDomains

ディレクトリ検索パスのリストを生成します。

NSArray * NSSearchPathForDirectoriesInDomains (
    NSSearchPathDirectory directory,
    NSSearchPathDomainMask domainMask,
    BOOL expandTilde
);

指定したドメイン内の指定したディレクトリのパス文字列のリストを生成します。

リストはディレクトリを検索した順序になります。

expandTildeがYESの場合、チルダはstringByExpandingTildeInPathで展開された表現になります。

ファイルシステムユーティリティの詳細については、『File System Programming Guide』を参照してください。

:このメソッドで返されるディレクトリは存在しない場合があります。
このメソッドは単純に、要求されたディレクトリの適切な場所を提供します。
アプリケーションの必要とする形式に応じて、開発者が適切なディレクトリに整形しなければならない場合があります。


NSSearchPathDirectory

これらの定数は、ディレクトリの場所の種類を指定するものです。

enum {
    NSApplicationDirectory = 1,
    NSDemoApplicationDirectory,
    NSDeveloperApplicationDirectory,
    NSAdminApplicationDirectory,
    NSLibraryDirectory,
    NSDeveloperDirectory,
    NSUserDirectory,
    NSDocumentationDirectory,
    NSDocumentDirectory,
    NSCoreServiceDirectory,
    NSAutosavedInformationDirectory = 11,
    NSDesktopDirectory = 12,
    NSCachesDirectory = 13,
    NSApplicationSupportDirectory = 14,
    NSDownloadsDirectory = 15,
    NSInputMethodsDirectory = 16,
    NSMoviesDirectory = 17,
    NSMusicDirectory = 18,
    NSPicturesDirectory = 19,
    NSPrinterDescriptionDirectory = 20,
    NSSharedPublicDirectory = 21,
    NSPreferencePanesDirectory = 22,
    NSItemReplacementDirectory = 99,
    NSAllApplicationsDirectory = 100,
    NSAllLibrariesDirectory = 101
};
typedef NSUInteger NSSearchPathDirectory;

NSApplicationDirectory
サポートされているアプリケーション(/Applications)。

NSDemoApplicationDirectory
サポートされていないアプリケーションとデモンストレーションバージョン。

NSDeveloperApplicationDirectory
開発者向けアプリケーション(/Developer/Applications)。

NSAdminApplicationDirectory
システムとネットワークの管理アプリケーション。

NSLibraryDirectory
ユーザに見える色々なドキュメント、サポート、構成ファイル(/Library)。

NSDeveloperDirectory
開発者向けリソース(/Developer)。
非推奨:Xcode 3.0以降では、開発者ツールは任意の場所にインストールすることができます。

NSUserDirectory
ユーザのホームディレクトリ(/Users)。

NSDocumentationDirectory
ドキュメント。

NSDocumentDirectory
ドキュメントのディレクトリ。

NSCoreServiceDirectory
core servicesの場所(System/Library/CoreServices)。

NSAutosavedInformationDirectory
ユーザのドキュメントを自動保存する場所(Library/Autosave Information)。

NSDesktopDirectory
ユーザのデスクトップディレクトリの場所。

NSCachesDirectory
破棄可能なキャッシュファイルの場所(Library/Caches)。

NSApplicationSupportDirectory
アプリケーションサポートファイルの場所(Library/Application Support)。

NSDownloadsDirectory
ユーザのダウンロードディレクトリの場所。
NSDownloadsDirectoryフラグは、NSUserDomainMaskが提供されている場合のみパスを生成します。

NSInputMethodsDirectory
入力メソッドの場所(Library/Input Methods)。

NSMoviesDirectory
ユーザの『ムービー』ディレクトリの場所(~/Movies)。

NSMusicDirectory
ユーザの『ミュージック』ディレクトリの場所(~/Music)。

NSPicturesDirectory
ユーザの『ピクチャ』ディレクトリの場所(~/Pictures)。

NSPrinterDescriptionDirectory
システムのPPDディレクトリの場所(Library/Printers/PPDs)。

NSSharedPublicDirectory
ユーザの『共有』ディレクトリの場所(~/Public)。

NSPreferencePanesDirectory
システムの環境設定で使用する、PreferencePanesディレクトリの場所(Library/PreferencePanes)。

NSItemReplacementDirectory
NSFileManagerのメソッドURLForDirectory:inDomain:appropriateForURL:create:error:で使用します。

NSAllApplicationsDirectory
アプリケーションが存在することができる全てのディレクトリ。

NSAllLibrariesDirectory
リソースが存在できる全てのディレクトリ。


NSSearchPathDomainMask

NSSearchPathDirectory型の基本となる場所を指定する、検索パスの範囲の定数です。

enum {
    NSUserDomainMask = 1,
    NSLocalDomainMask = 2,
    NSNetworkDomainMask = 4,
    NSSystemDomainMask = 8,
    NSAllDomainsMask = 0x0ffff,
};
typedef NSUInteger NSSearchPathDomainMask;

NSUserDomainMask
ユーザのホームディレクトリで、ユーザの個人アイテムをインストールする場所です(~)。

NSLocalDomainMask
現在のマシンの場所で、このマシンで誰でも利用することができるアイテムがインストールされている場所です。

NSNetworkDomainMask
ローカルエリアネットワークで一般に利用できる場所で、ネットワーク上で利用できるアイテムがインストールされている場所です(/Network)。

NSSystemDomainMask
Appleが提供している場所で、変更することはできません(/System)。

NSAllDomainsMask
全ての範囲。
将来追加される全てのアイテムを含みます。


stringByAppendingPathComponent:

– (NSString *)stringByAppendingPathComponent:(NSString *)aString

レシーバの文字列に指定した文字列を追加した新規の文字列を返します。

パスの区切り文字『/』は必要に応じて付与します。

aString:パスに追加する文字列を指定します。

aStringを"scratch.tiff"にした場合の、戻り値の例を下表に示します。

レシーバの文字列戻り値の文字列
"/tmp""/tmp/scratch.tiff"
"/tmp/""/tmp/scratch.tiff"
"/""/scratch.tiff"
""(空の文字列)"scratch.tiff"

このメソッドはファイルパスに対してのみ使用してください。
(URLなどで使わないこと)


●tmpディレクトリの入手

アプリケーションのホームディレクトリ下にあるtmpディレクトリは一時的なデータを保存する場所で、iTunesによるバックアップがされません。

アプリケーションが終了してもデータは保管されますので、削除はアプリケーションが行う必要があります。

また、アプリケーションが実行していない時にシステムが古いファイルは不要と判断して削除する場合があるので、注意してください。

tmpディレクトリのファイルパスを取得するにはNSTemporaryDirectory関数を使用します。

NSString *tempPath = NSTemporaryDirectory();


NSTemporaryDirectory

NSString * NSTemporaryDirectory (void);

現在のユーザ用の一時ディレクトリのパスを含む文字列を返します。

現在利用できるディレクトリが存在しない場合はnilを返します。

一時ディレクトリは、_CS_DARWIN_USER_TEMP_DIRフラグを渡したconfstr(3)によって決定されます。

消去ルールはそのディレクトリと同じです。

適切な一時ディレクトリを検索する(より柔軟性のある)代替手段については、NSFileManagerURLForDirectory:inDomain:appropriateForURL:create:error:を参照してください。 



参考文献

Foundation Functions Reference

Foundation Data Types Reference

iOS アプリケーションプログラミングガイド

はじめてのiPhone3プログラミングはじめてのiPhone3プログラミング
(2009/12/17)
Dave Mark、Jeff LaMarche 他

商品詳細を見る






bose_soundlink_revolve
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
03 | 2017/04 | 05
Sun Mon Tue Wed Thu Fri Sat
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

bose_soundlink_revolve
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR