FileManager.default.contentsOfDirectory afirma que el directorio de documentos no existe, aunque claramente existe. Estoy usando Swift 4.2 en mi iPhone SE real con iOS 12.1.2
Estoy leyendo el contenido del directorio de downloads en mi aplicación usando lo siguiente:
do { let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] let downloadedContents = try FileManager.default.contentsOfDirectory(at: documentsURL, includingPropertiesForKeys: nil) print(downloadedContents) } catch { print("Error while enumerating contents: \(error.localizedDescription)") }Esto imprime lo siguiente, diciéndome que existe un archivo en el directorio de documentos:
[file:///private/var/mobile/Containers/Data/Application/698F8D51-92AF-4BAB-A212-0A0982090550/Documents/example-file/](Moví el archivo allí desde el directorio de cachés después de descargar una compra desde la aplicación, pero no creo que sea relevante para esta pregunta).
Más adelante en mi código, quiero verificar si el archivo se descargó. Estoy usando lo siguiente:
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] let path = URL(fileURLWithPath: "example-file", relativeTo: documentsURL) var isDir : ObjCBool = false if FileManager.default.fileExists(atPath: path.standardizedFileURL.absoluteString, isDirectory: &isDir) { if isDir.boolValue { return true } else { return false // file exists but is not directory } } else { return false // file does not exist at all } Pero esto siempre devuelve falso, aunque contentsOfDirectory mostró que existe.
Durante la depuración, también probé:
let fileManager = FileManager.default let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] po FileManager.default.fileExists(atPath: documentsURL.standardizedFileURL.absoluteString) Pero esto también devuelve falso. Ahora estoy bastante seguro de que solo estoy usando los métodos fileExists incorrectamente.
¿Alguien puede detectar lo que estoy haciendo mal?
Resulta que uno debería usar documentsURL.path , en lugar de cualquier tipo de URL.
La ruta comienza con /var/mobile... mientras que las URL comienzan con file:///var...