2011-10-26 1 views
10

Desidero che l'utente selezioni qualsiasi file presente nel suo iPhone in modo che venga utilizzato come allegato e-mail. A tal fine, voglio mostrare l'elenco di tutti i file e le cartelle presenti in iPhone. Ma come potrei ottenere la lista di quei file? C'è un modo per ottenere quella lista?Come elencare tutte le cartelle e le loro sottodirectory/file in iPhone SDK?

+0

Ma per esempio io ho formato .pdf presenti da qualche parte nel disco rigido di iPhone e voglio per individuare il file o vuole ottenere il percorso del file di ... ?? ? –

+0

Non è possibile memorizzare tutti i file nella sandbox dell'applicazione. Puoi dire al sistema che l'app supporta PDF e consentire ad altre app di inviare i PDF dell'app. Non c'è altro modo per farlo. – rckoenes

risposta

18

Tenere in considerazione che l'app viene eseguita in una sandbox e non sarebbe in grado di ottenere alcuna cartella/file all'esterno di tale sandbox.

ObjectiveC

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

NSFileManager *manager = [NSFileManager defaultManager]; 
NSArray *fileList = [manager contentsOfDirectoryAtPath:documentsDirectory error:nil]; 
for (NSString *s in fileList){ 
    NSLog(@"%@", s); 
} 

Swift 4

guard let documentsDirectory = try? FileManager().url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) else { return } 
guard let fileEnumerator = FileManager.default.enumerator(at: documentsDirectory, includingPropertiesForKeys: nil, options: FileManager.DirectoryEnumerationOptions()) else { return } 
while let file = fileEnumerator.nextObject() { 
    print(file) 
} 
5

Ecco il più lento approccio (?):

NSFileManager * fileManager = [NSFileManager new]; 
NSArray * subpaths = [fileManager subpathsAtPath:path]; 

ma che si dovrebbe almeno puntare a un altro impianto specializzato ementation per le vostre esigenze.

Astrazioni di livello leggermente inferiori che consentono di enumerare su richiesta includono NSDirectoryEnumerator e CFURLEnumerator. A seconda della profondità della directory, questi hanno il potenziale per salvare molte interazioni inutili con il filesystem, rispetto a -[NSFileManager subpathsAtPath:].

+0

Per favore, puoi menzionare il valore della variabile "percorso" nella seconda riga. –

+0

@Muhammed Bene, non si ha accesso a nessun file in nessun punto del filesystem perché è in modalità sandbox.Tu * non * hai accesso ai dati locali della tua app: 'documentsDirectory' di SimpleBob dimostra come otterresti quel percorso. – justin

+0

Grazie per la tua risposta, una piccola confusione. cosa succede se i miei file sono presenti nella cartella delle foto di iPhone. Accedo? intendo dire che posso elencare tutti i file presenti nella cartella delle foto. –

3

È possibile utilizzare NSDirectoryEnumerator via NSFileManager.enumeratorAtPath

Dalla documentazione:

NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent: @"Documents"]; 
NSFileManager *localFileManager=[[NSFileManager alloc] init]; 
NSDirectoryEnumerator *dirEnum = 
    [localFileManager enumeratorAtPath:docsDir]; 

NSString *file; 
while ((file = [dirEnum nextObject])) { 
    if ([[file pathExtension] isEqualToString: @"doc"]) { 
     // process the document 
     [self scanDocument: [docsDir stringByAppendingPathComponent:file]]; 
    } 
} 
1

Sono un autore di FileExplorer di controllo che è un file browser per iOS e soddisfa la maggior parte delle vostre esigenze. Nota che ti permette di navigare solo su quei file e directory che sono posizionati all'interno della tua sandbox.

Ecco alcune delle caratteristiche di mio controllo:

  1. Possibilità di scegliere i file o/e directory, se v'è la necessità per questo
  2. Possiblity per rimuovere i file e/o le directory se c'è un bisogno di quello
  3. Funzionalità di ricerca integrata
  4. Visualizza file audio, video, immagine e PDF.
  5. Possibilità di aggiungere supporto per qualsiasi tipo di file.

È possibile trovare il mio controllo here.

2

rapida 3

let fileManager:FileManager = FileManager() 
    let files = fileManager.enumerator(atPath: NSHomeDirectory()) 
    while let file = files?.nextObject() { 
     print("Files::",file) 
    }