Swift3.0 fileAttributes 在现有文件上抛出 "no such file" 错误
Swift3.0 fileAttributes throws "no such file" error on existing file
我是 Swift 的新手,我正在尝试执行文件创建日期检查。
想法是检查文件创建时间是否超过 7 天。由于某种原因,代码总是 returns "no such file" 错误。
为了检查哪里出了问题,我使用相同的路径在相同的函数中读取了文件的内容,并且运行完美。
我使用的路径不正确还是我误解了什么?
func creationDateCheck(name: String) -> Bool {
// This is the path I am using, file is in the favorites folder in the .documentsDirectory
let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let myFilesPath = documentsUrl.appendingPathComponent("favorites/" + name + ".xml")
let pathString = "\(myFilesPath)"
//First do block tries to get the file attributes and fails
do {
let fileAttributes = try FileManager.default.attributesOfItem(atPath: pathString)
print(fileAttributes)
let creationDate = (fileAttributes[FileAttributeKey.creationDate] as? NSDate)!
return daysBetweenDates(endDate: creationDate as Date) > 7
} catch let error as NSError {
print(error.localizedDescription)
}
// Second do block reads from file successfully using the same path
do {
print(try String(contentsOf: myFilesPath, encoding: String.Encoding.utf8))
}catch {print("***** ERROR READING FROM FILE *****")}
return false
}
您无法直接使用 "\(myFilesPath)"
从 URL
获取 String
而不是您需要使用 path
属性 of URL
.
let fileAttributes = try FileManager.default.attributesOfItem(atPath: myFilesPath.path)
您成功读取文件内容的原因是您使用了 String(contentsOf:encoding:)
并且它将接受 URL
对象作为第一个参数。
我是 Swift 的新手,我正在尝试执行文件创建日期检查。
想法是检查文件创建时间是否超过 7 天。由于某种原因,代码总是 returns "no such file" 错误。
为了检查哪里出了问题,我使用相同的路径在相同的函数中读取了文件的内容,并且运行完美。
我使用的路径不正确还是我误解了什么?
func creationDateCheck(name: String) -> Bool {
// This is the path I am using, file is in the favorites folder in the .documentsDirectory
let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let myFilesPath = documentsUrl.appendingPathComponent("favorites/" + name + ".xml")
let pathString = "\(myFilesPath)"
//First do block tries to get the file attributes and fails
do {
let fileAttributes = try FileManager.default.attributesOfItem(atPath: pathString)
print(fileAttributes)
let creationDate = (fileAttributes[FileAttributeKey.creationDate] as? NSDate)!
return daysBetweenDates(endDate: creationDate as Date) > 7
} catch let error as NSError {
print(error.localizedDescription)
}
// Second do block reads from file successfully using the same path
do {
print(try String(contentsOf: myFilesPath, encoding: String.Encoding.utf8))
}catch {print("***** ERROR READING FROM FILE *****")}
return false
}
您无法直接使用 "\(myFilesPath)"
从 URL
获取 String
而不是您需要使用 path
属性 of URL
.
let fileAttributes = try FileManager.default.attributesOfItem(atPath: myFilesPath.path)
您成功读取文件内容的原因是您使用了 String(contentsOf:encoding:)
并且它将接受 URL
对象作为第一个参数。