57 votes

Lister les fichiers enregistrés dans le répertoire des documents iOS dans un UITableView ?

J'ai mis en place le code suivant pour enregistrer un fichier dans le répertoire des documents :

NSLog(@"Saving File...");

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.reddexuk.com/logo.png"]];
AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc] initWithRequest:request] autorelease];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"logo.png"];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Successfully downloaded file to %@", path);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

[operation start];

Cependant, je souhaite ajouter chaque fichier à une UITableView lorsqu'il est enregistré avec succès. Lorsque l'on touche le fichier dans l'UITableView, j'aimerais qu'une UIWebView navigue jusqu'à ce fichier (tout en étant hors ligne).

De même, comment puis-je obtenir le nom du fichier et sa terminaison, par exemple "logo.png" au lieu de http://www.reddexuk.com/logo.png ?

Comment puis-je le faire ?

144voto

syclonefx Points 1797

Voici la méthode que j'utilise pour obtenir le contenu d'un répertoire.

-(NSArray *)listFileAtPath:(NSString *)path
{
    //-----> LIST ALL FILES <-----//
    NSLog(@"LISTING ALL FILES FOUND");

    int count;

    NSArray *directoryContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:NULL];
    for (count = 0; count < (int)[directoryContent count]; count++)
    {
        NSLog(@"File %d: %@", (count + 1), [directoryContent objectAtIndex:count]);
    }
    return directoryContent;
}

21voto

Mike Martin Points 141
-(NSArray *)findFiles:(NSString *)extension{

NSMutableArray *matches = [[NSMutableArray alloc]init];
NSFileManager *fManager = [NSFileManager defaultManager];
NSString *item;
NSArray *contents = [fManager contentsOfDirectoryAtPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] error:nil];

// >>> this section here adds all files with the chosen extension to an array
for (item in contents){
    if ([[item pathExtension] isEqualToString:extension]) {
        [matches addObject:item];
    }
}
return matches; }

L'exemple ci-dessus est assez explicite. J'espère que cela répond à votre deuxième question.

11voto

coneybeare Points 23802

Pour obtenir le contenu d'un répertoire

- (NSArray *)ls {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSArray *directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath: documentsDirectory];

    NSLog(@"%@", documentsDirectory);
    return directoryContent;
}

Pour obtenir le dernier composant du chemin,

[[path pathComponents] lastObject]

4voto

mattt Points 10419

Pour un nom de fichier plus raisonnable :

NSString *filename = [[url lastPathComponent] stringByAppendingPathExtension:[url pathExtension]];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X