从文档目录ios获取文件名的文件路径

时间:2014-05-21 10:43:55

标签: ios objective-c nsfilemanager nsbundle

在我的应用程序中,我下载PDF文件,该文件存储在不同子文件夹下的“Document”目录中。

现在我有文件名,我想在“文档”目录中获取其路径,但问题是我不知道存储该文件的确切子文件夹。

那么有没有任何方法可以通过文件名给我文件路径,就像有一种方法适用于主包:

(NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension

我不想遍历每个文件夹,这是一种繁琐的方式。

感谢。

3 个答案:

答案 0 :(得分:17)

您可以像这样搜索文档目录:

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);

答案 1 :(得分:2)

Swift 2.2非常简单:

let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first! as NSString
let plistPath = paths.stringByAppendingPathComponent("someFile.plist")

答案 2 :(得分:1)

你必须走树才能找到文件;在〜/ Documents目录中没有等效的-pathForResource:ofType。