web-dev-qa-db-fra.com

Obtenir le chemin du fichier par nom de fichier à partir du répertoire de documents ios

Dans mon application, je télécharge les fichiers PDF qui sont stockés dans le répertoire "Document" sous différents sous-dossiers.

Maintenant, j'ai un nom de fichier pour lequel je veux obtenir son chemin dans le répertoire "Document" mais le problème est que je ne connais pas le sous-dossier exact sous lequel ce fichier est stocké.

Existe-t-il une méthode qui me donnera chemin de fichier par nom de fichier comme il existe une méthode qui fonctionne pour le bundle principal:

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

Je ne veux pas parcourir chaque dossier, ce qui est fastidieux.

Merci.

17
ViruMax

Vous pouvez rechercher le répertoire des documents comme ceci:

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

ÉDITER:

Vous pouvez également utiliser NSPredicate. S'il y a plusieurs milliers de fichiers dans le répertoire des documents, cela peut se bloquer avec une erreur de mémoire insuffisante.

NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.lastPathComponent == %@", searchFilename];
NSArray *matchingPaths = [[[NSFileManager defaultManager] subpathsAtPath:documentsDirectory] filteredArrayUsingPredicate:predicate];

NSLog(@"%@", matchingPaths);
18
Abhi Beckert

Swift 2.2 assez simple:

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

Vous devrez parcourir l'arbre pour trouver le fichier; il n'y a pas d'équivalent à -pathForResource: ofType qui fonctionne dans le répertoire ~/Documents.

1
Ben Gottlieb