私のアプリケーションでは、PDFファイルをダウンロードします。このファイルは、異なるサブフォルダーの下の「ドキュメント」ディレクトリに保存されます。
「ドキュメント」ディレクトリにパスを取得したいファイル名がありますが、問題はそのファイルが保存されている正確なサブフォルダがわからないことです。
だから私に与える方法はありますかファイル名によるファイルパスメインバンドルで機能する1つの方法があるように:
(NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension
面倒な方法である各フォルダを繰り返し処理する必要はありません。
ありがとう。
次のようにドキュメントディレクトリを検索できます。
NSString *searchFilename = @"hello.pdf"; // name of the PDF you are searching for
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSDirectoryEnumerator *direnum = [[NSFileManager defaultManager] enumeratorAtPath:documentsDirectory];
NSString *documentsSubpath;
while (documentsSubpath = [direnum nextObject])
{
if (![documentsSubpath.lastPathComponent isEqual:searchFilename]) {
continue;
}
NSLog(@"found %@", documentsSubpath);
}
編集:
NSPredicateも使用できます。ドキュメントディレクトリに数千のファイルがある場合、これはメモリ不足エラーでクラッシュする可能性があります。
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.lastPathComponent == %@", searchFilename];
NSArray *matchingPaths = [[[NSFileManager defaultManager] subpathsAtPath:documentsDirectory] filteredArrayUsingPredicate:predicate];
NSLog(@"%@", matchingPaths);
Swift 2.2はとてもシンプルです:
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first! as NSString
let plistPath = paths.stringByAppendingPathComponent("someFile.plist")
ファイルを見つけるには、ツリーを歩く必要があります。 〜/ Documentsディレクトリで機能する-pathForResource:ofTypeに相当するものはありません。