Swift 3.0 FileManager.fileExists (atPath :) siempre devuelve false

Cuando uso el método .fileExists(atPath:) para juzgar si el file existe en el sistema de files, el método siempre me devuelve falso. Revisé el sistema de files y el file existe. Aquí está mi código:

 let filePath = url?.path var isDir : ObjCBool = false if(self.fileManager.fileExists(atPath: filePath!, isDirectory: &isDir)){ let result = NSData(contentsOfFile: filePath!) } 

o

 let filePath = url?.path if(self.fileManager.fileExists(atPath: filePath!)){ let result = NSData(contentsOfFile: filePath!) } 

la cláusula if siempre se omitirá.

Supongo que su url es un tipo de URL . Si es así testing esto:

 let filePath = url?.path // always try to work with URL when accessing Files if(FileManager.default.fileExists(atPath: filePath!)){ // just use String when you have to check for existence of your file let result = NSData(contentsOf: url!) // use URL instead of String } 

Dicho lo suficiente, debe cambiar su implementación de esta manera:

 if(FileManager.default.fileExists(atPath: (url?.path)!)){ // just use String when you have to check for existence of your file let result = NSData(contentsOf: url!) // use URL instead of String } 

EDITAR: 1

Hay una manera aún más mejor, puede llamarlo veloz (: D). No tiene que verificar explícitamente la existencia del file .

 guard let result = NSData(contentsOf: fileURL) else { // No data in your fileURL. So no data is received. Do your task if you got no data // Keep in mind that you don't have access to your result here. // You can return from here. return } // You got your data successfully that was in your fileURL location. Do your task with your result. // You can have access to your result variable here. You can do further with result constant. print(result) 
  let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true); var path = paths[0] as String; path = path + "/YourFilePath" if((NSFileManager.defaultManager().fileExistsAtPath(path))) { let result = NSData(contentsOfFile: filePath!)} 

Prueba el código anterior y vuelve a verificar

en swift 3 por si alguien se confunde como yo, aquí están los fragments completos:

 let str = "file:///Users/martian2049/Library/Developer/CoreSimulator/Devices/67D744AA-6EEC-4AFD-A840-366F4D78A18C/data/Containers/Data/Application/DD96F423-AF9F-4F4D-B370-94ADE7D6D0A5/Documents/72b8b0fb-7f71-7f31-ac9b-f9cc95dfe90d.mp3" let url = URL(string: str) print(url!.path,"\n") if FileManager.default.fileExists(atPath: url!.path) { print("FILE Yes AVAILABLE") } else { print("FILE NOT AVAILABLE") } 

esto imprime

 /Users/martian2049/Library/Developer/CoreSimulator/Devices/67D744AA-6EEC-4AFD-A840-366F4D78A18C/data/Containers/Data/Application/DD96F423-AF9F-4F4D-B370-94ADE7D6D0A5/Documents/72b8b0fb-7f71-7f31-ac9b-f9cc95dfe90d.mp3 FILE Yes AVAILABLE 

¿Se ha cortado el ' file:// '?

  1. Primero, ¿cómo se ve tu ruta de file? Si la ruta comienza con un ~, entonces debe ampliarse con expandingTildeInPath ;
  2. Compruebe si la ruta no es accesible para su aplicación. La aplicación iOS solo puede visitar sus directorys de sandbox.