Frage

Ich habe den folgenden Code eingerichtet, um eine Datei im Dokumentenverzeichnis zu speichern:

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];

Ich möchte jedoch jede Datei zu einem UitableView hinzufügen, wenn sie erfolgreich gespeichert wird. Wenn die Datei in der UitableView abgebildet ist, möchte ich, dass eine UIWebView zu dieser Datei navigieren (alle offline).

Auch - wie kann ich einfach den Dateinamen und das Ende wie "logo.png" anstelle von bekommen http://www.reddexuk.com/logo.png?

Wie kann ich das machen?

War es hilfreich?

Lösung

Hier ist die Methode, mit der ich den Inhalt eines Verzeichnisses erhalte.

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

Andere Tipps

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

Das obige Beispiel ist ziemlich selbsterklärend. Ich hoffe, es beantwortet Ihre zweite Frage.

Um den Inhalt eines Verzeichnisses zu bekommen

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

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

Um die letzte Pfadkomponente zu erhalten,

[[path pathComponents] lastObject]

Danke Alex,

Hier ist Swift -Version

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

Ich weiß, dass dies eine alte Frage ist, aber es ist eine gute und die Dinge haben sich in iOS -Post -Sandboxen geändert.

Der Weg zu allen lesbaren/schriftlichen Ordnern in der App Wille Jetzt haben Sie einen Hash und Apple behält sich das Recht vor, diesen Weg jederzeit zu ändern. Es Wille Ändere bei jedem App -Start sicher.

Sie müssen den Pfad zum gewünschten Ordner erreichen und Sie können ihn nicht so gut codieren, wie wir es früher in der Vergangenheit tun konnten.

Sie fragen nach dem Dokumentenverzeichnis und im Rückgabearray befindet sich es an Position 0. Von dort aus verwenden Sie diesen Wert, um dem NSFilemanager den Verzeichnisgehalt zu erhalten.

Der folgende Code funktioniert unter iOS 7 und 8, um ein Array des Inhalts im Dokumentenverzeichnis zurückzugeben. Möglicherweise möchten Sie es nach Ihren eigenen Vorlieben sortieren.

+ (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;
}

Für einen vernünftigen Dateinamen:

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

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

NSString *filename;

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

zum Aufzählen aller Dateien im Verzeichnis

Swift 3.x

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

Swift 5

Funktion, die eine Array von URLs aller Dateien im Dokumentenverzeichnis zurückgibt, die MP4 -Videos sind. Wenn Sie alle Dateien möchten, entfernen Sie einfach die filter.

Es überprüft nur Dateien im oberen Verzeichnis. Wenn Sie auch Dateien in den Unterverzeichnissen auflisten möchten, entfernen Sie die .skipsSubdirectoryDescendants Möglichkeit.

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 ?? []
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top