15

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

Trombone0904
  • 4,132
  • 8
  • 51
  • 104

2 Answers2

27

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
  • 529,903
  • 94
  • 1,240
  • 1,382
1

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

var contentString = try String(contentsOfFile: path.path)
Trombone0904
  • 4,132
  • 8
  • 51
  • 104