9

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

Ghost108
  • 3,277
  • 8
  • 37
  • 79

2 Answers2

19

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)
Martin R
  • 488,667
  • 78
  • 1,132
  • 1,248
1

thx, I solved my problem. I have to use .path instead of .absoluteString:

var contentString = try String(contentsOfFile: path.path)
Ghost108
  • 3,277
  • 8
  • 37
  • 79