Question

J'ai mis en place le code ci-dessous 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 tiens à ajouter chaque fichier à un UITableView quand il est enregistré avec succès. Lorsque le fichier dans le UITableView est exploité, je voudrais un UIWebView pour accéder à ce fichier (tous les hors ligne).

De plus - comment puis-je obtenir juste le nom de fichier et se terminant comme « logo.png » au lieu de http: //www.reddexuk.com/logo.png ?

Comment puis-je faire?

Était-ce utile?

La solution

Voici la méthode que j'utiliser 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;
}

Autres conseils

-(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 vous répond deuxième question.

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,

[[path pathComponents] lastObject]

Merci Alex,

Voici la version Swift

func listFilesOnDevice() {

    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentDirectory = paths[0] as! String
    let manager = NSFileManager.defaultManager()
    if let allItems = manager.contentsOfDirectoryAtPath(documentDirectory, error: nil) {
        println(allItems)
    }
}

Je sais que c'est une vieille question, mais il est bon et les choses ont changé dans iOS après sandboxing.

Le chemin d'accès à tous les dossiers en lecture / écriture dans l'application maintenant un hachage et Apple se réserve le droit de modifier ce chemin à tout moment. Il changement sur le lancement de chaque application pour vous.

Vous aurez besoin d'obtenir le chemin d'accès au dossier que vous voulez et vous ne pouvez pas coder en dur comme nous l'habitude d'être en mesure de le faire dans le passé.

Vous demandez le répertoire des documents et dans le tableau de retour, il est en position 0. Puis à partir de là, vous utilisez cette valeur à l'offre à la NSFileManager pour obtenir le contenu du répertoire.

Le code ci-dessous fonctionne sous iOS 7 et 8 pour retourner un tableau du contenu dans le répertoire des documents. Vous pouvez trier selon vos propres préférences.

+ (NSArray *)dumpDocumentsDirectoryContents {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0];

    NSError *error;
    NSArray *directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsPath error:&error];

    NSLog(@"%@", directoryContents);
    return directoryContents;
}

Pour un nom de fichier plus raisonnable:

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

NSDirectoryEnumerator *dirEnum = [[NSFileManager defaultManager] enumeratorAtPath:dir_path];

NSString *filename;

while ((filename = [dirEnum nextObject]))
{
    // Do something amazing
}

pour TOUS les fichiers dans l'énumération dans le répertoire

3.x Swift

let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
if let allItems = try? FileManager.default.contentsOfDirectory(atPath: documentDirectory) {
  print(allItems)
}

Swift 5

fonction qui renvoie tableau d'URL de tous les fichiers dans le répertoire des documents qui sont des vidéos MP4. Si vous voulez que tous les fichiers, il suffit de retirer le filter.

Il vérifie uniquement les fichiers dans le répertoire supérieur. Si vous voulez la liste des fichiers aussi dans les sous-répertoires, supprimez l'option .skipsSubdirectoryDescendants.

func listVideos() -> [URL] {
    let fileManager = FileManager.default
    let documentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]

    let files = try? fileManager.contentsOfDirectory(
        at: documentDirectory,
        includingPropertiesForKeys: nil,
        options: [.skipsSubdirectoryDescendants, .skipsHiddenFiles]
    ).filter {
        $0.lastPathComponent.hasSuffix(".mp4")
    }

    return files ?? []
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top