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

Vir*_*Max 17 objective-c nsfilemanager nsbundle ios

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

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

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

(NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Abh*_*ert 18

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

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);
}
Run Code Online (Sandbox Code Playgroud)

编辑:

您也可以使用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);
Run Code Online (Sandbox Code Playgroud)