Get file path by file name from documents directory ios

In my application I download PDF files which gets stored in “Document” directory under different sub folders.

Now I have file name for which I want to get its path in “Document” directory but problem is I don’t know the exact sub folder under which that file is stored.

  • Programmatically detect if app is being run on device or simulator
  • drawRect circle and animate size/color
  • NSIndexPath and IndexPath in Swift 3.0
  • Swift 3.0 Error: Escaping closures can only capture inout parameters explicitly by value
  • ios observing change in frame of a UIView during animation
  • Force landscape for one view controller ios
  • So is there any method which will give me file path by file’s name like there is one method which works for main bundle:

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

    I don’t want to iterate through each folder which is a tedious way.

    Thanks.

    3 Solutions Collect From Internet About “Get file path by file name from documents directory ios”

    You can search the documents directory like this:

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

    EDIT:

    You can also use NSPredicate. If there are many thousands of files in the documents directory, this might crash with an out of memory error.

    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 pretty simple:

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

    You’ll have to walk the tree to find the file; there’s no equivalent to -pathForResource:ofType that works in the ~/Documents directory.