2012-08-30 16 views
26

メインアプリバンドルに任意のファイルセットが含まれているとします。私は、起動時にファイルURLを取得し、どこかに保存したいと思います。これはNSFileManagerを使用して可能ですか?その点については文書は不明です。アプリ起動時のバンドルファイル参照/パスの取得

注:ファイルURLが必要なだけで、実際のファイルにアクセスする必要はありません。

+0

「ファイル参照」とは何ですか?パス? URL?何? –

+0

ファイルの参照先ファイルのURLを意味します –

答えて

59

を[あなたは、あなたの質問は何をしたいのより具体的に更新する必要があり、これはもともと全く明らかにされていなかった]あなたはあなたができる

NSString *path = [[NSBundle mainBundle] pathForResource:@"SomeFile" ofType:@"jpeg"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 

を使用して、メインバンドル内のファイルのURLを取得することができますあなたはファイルの名前を知らないと、あなただけの、バンドル内のすべてのファイルを表示したい

を使用する場合は

NSString *docsDir = [NSSearchForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *plistPath = [docsDir stringByAppendingPathComponent:@"Files.plist"]; 
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[url absoluteString] forKey:@"SomeFile.jpeg"]; 
[dict writeToFile:plistPath atomically:YES]; 

:Documentsディレクトリでは、例えば、プロパティリストファイルには、このURLを書きます

NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[[NSBundle mainBundle] bundlePath] error:NULL]; 
for (NSString *fileName in files) { 
    NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:nil]; 
    NSURL *url = [NSURL fileURLWithPath:path]; 
    // do something with `url` 
} 
+0

ファイルの名前がわからない場合は、単にそのファイルをすべて取得するだけですか? –

+0

@AndrewLauerBarinov次に、NSFileManagerのドキュメントを読むことができます。 (しかし、とにかく、編集を参照してください...) –

+0

追加情報ありがとう! –

2

はい、あなたは彼らのパスを取得します:

NSString *path = [NSBundle mainBundle] pathForResource:@"file1" ofType:@"png"]; 
NSURL *fileURL = [NSURL fileURLWithPath:path] 

// save it as any other object or in a dictionary: 

[myMutableDictionary setObject:fileURL forKey:@"file1.png"]; 

EDIT:その後、ファイルを取得する各ディレクトリを歩いて、ファイルの完全なリストを取得NSFileManagerを使用して、バンドル自体へのパスを取得するには、作りますURLを保存し、どこかに保存します。だから、これを行うためにディレクトリを歩く方法については、コードの大部分があります。

+1

ファイルの名前が分からない場合、単にそのファイルをすべて取得したいのですが? –

0

むしろNSURLコンストラクタにパスを渡すよりも、直接NSURLを得るために10.6またはiOS 4で利用可能なNSBundle上のAPI(documentation)があります:

- (NSURL *)URLForResource:(NSString *)name withExtension:(NSString *)ext; 

またsubdirectoryを取るのバリアントを持っており、 localizationName-pathForResource:相当と同じです。

関連する問題