IOSが各種ファイルディレクトリのパスを取得する方法

4041 ワード

iphoneサンドボックスのモデルは四つのフォルダがあります。それぞれ何ですか?永久データはどの位置に格納されますか?シミュレータのパスを得る簡単な方法は何ですか?
Dcuments、tmp、ap、Library。
(NSHomeDirectory()、
手動で保存したファイルはdocumentsファイルにあります。
Nsuserdefaults保存したファイルはtmpフォルダにあります。
1、Dcumentsディレクトリ:すべてのアプリケーションデータファイルをこのディレクトリに書き込むべきです。このディレクトリは、ユーザデータまたは他の定期的にバックアップすべき情報を保存します。
2、アプリName.appディレクトリ:これはアプリケーションのパッケージディレクトリで、アプリケーション自体が含まれています。アプリケーションは署名が必要ですので、実行中にこのディレクトリの内容を変更することはできません。そうでないと、アプリケーションを起動できなくなります。
3、Libraryディレクトリ:このディレクトリには二つのサブディレクトリがあります。CachesとPreferences
Preferencesディレクトリ:アプリケーションのプリファレンス設定ファイルを含みます。プリファレンス設定ファイルを直接作成するのではなく、NSUserDefaultsクラスを使ってアプリケーションのプリファレンスを取得し、設定するべきです。
Cachesディレクトリ:アプリケーション専用のサポートファイルを保存し、アプリケーションの再起動に必要な情報を保存します。
4、tmpディレクトリ:このディレクトリは一時ファイルを保存し、アプリケーションを再起動する際に必要でない情報を保存します。
これらのディレクトリパスを取得する方法:
第一の方法:ホームディレクトリのパスを取得する関数:

NSString *homeDir = NSHomeDirectory();
第二の方法:Dcumentsディレクトリパスを取得する方法:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
第3の方法:Cachesディレクトリパスを取得する方法:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesDir = [paths objectAtIndex:0];
第四の方法:tmpディレクトリのパスを取得する方法:

NSString *tmpDir = NSTemporaryDirectory();
第5の方法:アプリケーションパッケージ内のリソースファイルのパスを取得する方法:
例えば、プログラムパッケージ内のピクチャリソース(apple.png)パスを取得する方法:

NSString *imagePath = [[NSBundle mainBundle] pathForResource:@”apple” ofType:@”png”];
UIImage *appleImage = [[UIImage alloc] initWithContentsOfFile:imagePath];
コードの中のmanBundleはアプリケーションパッケージを表すオブジェクトを返すために使用されます。
iphoneサンドボックスのいくつかのカタログの取得方法:
//マスタディレクトリのパスを取得する 

NSString *homeDir = NSHomeDirectory(); 
//Dcumentsディレクトリパスを取得する 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *docDir = [paths objectAtIndex:0]; 
//Cachesディレクトリのパスを取得する 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *cachesDir = [paths objectAtIndex:0]; 
//tmpディレクトリのパスを取得する 

NSString *tmpDir = NSTemporaryDirectory(); 
//現在のパッケージの画像リソースを取得するパス 

NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"apple" ofType:@"png"]; 
UIImage *appleImage = [[UIImage alloc] initWithContentsOfFile:imagePath]; 
例:

NSFileManager* fm=[NSFileManager defaultManager];
if(![fm fileExistsAtPath:[self dataFilePath]]){
//以下はそのファイルを作成する経路の保存です。

[fm createDirectoryAtPath:[self dataFilePath] withIntermediateDirectories:YES attributes:nil error:nil];
//ディレクトリのすべてのファイル名を取得する

NSArray *files = [fm subpathsAtPath: [self dataFilePath] ];
//あるファイルを読み込みます

NSData *data = [fm contentsAtPath:[self dataFilePath]];
//または

NSData *data = [NSData dataWithContentOfPath:[self dataFilePath]];
}
iosがファイルパスを取得する方法は様々です。以下、IOSでファイルパスを取得するのは比較的簡単な方法を紹介します。
ネット上のDOCUMNETと教程は本当に読めば読むほど分からなくなります。やはり自分でメモしてください。
まず、この例のtestFile.txtファイルなどのファイルをresourceグループに入れて、コードを書きます。

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"testFile" ofType:@"txt"];
NSLog(@"data path: %@", filePath); 
出力されたログでは、testFile.txtのパスがすでに取得されていることが見えます。
もう一つの例を挙げます。SQLITEデータベースに接続します。

NSString *dataPath = [[NSBundle mainBundle] pathForResource:@"myData" ofType:@"sqlite"];
if (sqlite3_open([dataPath UTF8String], &db) != SQLITE_OK)
{
  sqlite3_close(db);
  NSLog(@"       ");
}
else
{
  NSLog(@"       ");
}
以上の内容はIOSが各種ファイルディレクトリのパスを取得する方法です。