The file “xxx” couldn’t be opened because there is no such file

Ghost108 picture Ghost108 · Sep 20, 2017 · Viewed 10.6k times · Source

I would like to open a .txt file and save the content as a String. I tried this:

let path = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("xxx.txt")
var contentString = try String(contentsOfFile: path.absoluteString)
print(path)

The print result:

file:///Users/Username/Documents/xxx.txt

But I get the error:

The file “xxx.txt” couldn’t be opened because there is no such file

The file is 100% available

Notice: I working with swift 4 for macOS

Answer

Martin R picture Martin R · Sep 20, 2017

Your path variable is an URL, and path.absoluteString returns a string representation of the URL (in your case the string "file:///Users/Username/Documents/xxx.txt"), not the underlying file path "/Users/Username/Documents/xxx.txt".

Using path.path is a possible solution:

let path = ... // some URL
let contentString = try String(contentsOfFile: path.path)

but the better method is to avoid the conversion and use the URL-based methods:

let path = ... // some URL
let contentString = try String(contentsOf: path)