2015-05-29 2 views
0

У меня есть папка с 4 подпапками в моем приложении iOS, каждая из которых содержит около 20 файлов. Я хотел бы иметь возможность перебирать каждую папку и распечатывать имена файлов. Я не уверен, как это сделать.Распечатайте все имена файлов в папке приложения iOS

Вот что я пробовал:

let docsPath = NSBundle.mainBundle().resourcePath! + "/Samples"; 
    let fileManager = NSFileManager.defaultManager() 

    var error: NSError? 
    let docsArray = fileManager.contentsOfDirectoryAtPath(docsPath, error:&error) 
    println(docsArray) 

Это выводит ноль. Я ожидаю, что он распечатает каждый из имен файлов. Как это сделать?

+0

сделать "' Println (\ error.localizedDescription) '" и скажите мне, что ошибка, которую вы получаете ... –

+0

«Операция не может быть выполнена. (Ошибка какао 260.)» – DCIndieDev

+0

где находится папка с образцом? –

ответ

0

У вас есть две проблемы здесь:

1)

Проверьте вашу встроенную программу, чтобы увидеть, если «Образцы» на самом деле в конечном итоге в бинарник. Из-за ошибки «Операция не может быть завершена», я думаю, что вы не копируете «Образцы» в скомпилированный пакет приложений или, по крайней мере, в то место, которое вы ожидаете от него.

2)

Вызов вы делаете даст вам содержимое папки, но не содержимое подпапок которых является то, что вы действительно хотите, чтобы перечислить.

Используйте NSDirectoryEnumerator вместо этого, чтобы получить содержимое этой папки и подпапок. Here is a related question, который может дать вам одно направление.

0

Вы можете использовать перечисление NSFileManager, если хотите получить все файлы, включая внутри подкаталогов.

Простой пример:

if let enumerator = fileManager.enumeratorAtURL(docsPath, includingPropertiesForKeys: nil, options: nil, errorHandler: nil) { 
    while let url = enumerator.nextObject() as? NSURL { 
     println(url) 
    } 
} 
+1

Вам не нужно использовать функцию enumeratorAtURL. Функция 'contentOfDirectoryAtPath' просто прекрасна. – rmaddy

+0

'contentsOfDirectoryAtPath' не пересекает подкаталоги, это делает; Я отредактировал свой ответ с этой информацией. – Moritz

+0

Правда. Это зависит от потребностей OP. Но так как они получают 'nil', скорее всего, путь недействителен, поэтому использование' enumeratorAtURL' не поможет. – rmaddy

0

Nevermind, я понял это:

var docsPath = NSBundle.mainBundle().resourcePath! + "/Snare"; 
    let fileManager = NSFileManager.defaultManager() 

    var error: NSError? 
    let docsArray = fileManager.contentsOfDirectoryAtPath(docsPath, error:&error) 

    //println(error!.localizedDescription) 
    println(docsArray) 


    for filename in docsArray! 
    { 
     let subfolderPath = docsPath + "/"+(filename as! String) 
     println(docsPath) 

     let subarray = fileManager.contentsOfDirectoryAtPath(subfolderPath, error: &error) 
     println(subarray) 
    } 
+0

Значит, это просто опечатка в пути. – rmaddy

+0

Вы должны взглянуть на работу с путями –

+0

https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/index.html#//apple_ref/doc/uid/20000154-SW38 –

Смежные вопросы