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?
risposta
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)
}
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:]
.
Per favore, puoi menzionare il valore della variabile "percorso" nella seconda riga. –
@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
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. –
È 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]];
}
}
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:
- Possibilità di scegliere i file o/e directory, se v'è la necessità per questo
- Possiblity per rimuovere i file e/o le directory se c'è un bisogno di quello
- Funzionalità di ricerca integrata
- Visualizza file audio, video, immagine e PDF.
- Possibilità di aggiungere supporto per qualsiasi tipo di file.
È possibile trovare il mio controllo here.
rapida 3
let fileManager:FileManager = FileManager()
let files = fileManager.enumerator(atPath: NSHomeDirectory())
while let file = files?.nextObject() {
print("Files::",file)
}
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 ... ?? ? –
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