我在文件中写文本时遇到问题.到目前为止我所做的是以下内容:我有一个字符串,其中包含要存储的文本,文件名也是一个字符串.
let someText = "abcd"
let fileName = "file:///xxx"
Run Code Online (Sandbox Code Playgroud)
当然"xxx"是文档目录下的.txt文件,因此应该可以编写.
然后我发现我可以使用字符串的write方法.但是对于这个调用我需要文件名作为url所以我有这段代码:
let fileUrl = URL(string: fileName)
do {
try someText.write(to: fileUrl, atomically: false, encoding: String.Encoding.utf8)
}
catch { }
Run Code Online (Sandbox Code Playgroud)
如果我启动我的应用程序,那么我将收到错误"文件xxx不存在".好的,这是正确的,因为没有创建文件.我认为write方法会自动执行,但似乎不是这样.
这就是我不知道如何解决这个问题的重点!
我正在使用Xcode 8 + Swift 3.
+++ EDIT +++
我试着解释一下我正在寻找什么.
假设我有两个任务:第一个任务构建文件名并将其存储在数据库中.这就是我使用字符串的原因:
var fileName = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).path
if (!fileName.hasSuffix("/")) {
fileName += "/"
}
fileName += "file.txt"
Run Code Online (Sandbox Code Playgroud)
如您所见,此时未创建该文件,因为我只需要此任务中的名称.
好然后第二个任务.它必须从数据库中选择一个特定的文件名,并将其附加到file:// scheme:
let fileName = "file://" + fileNameFromDatabase
Run Code Online (Sandbox Code Playgroud)
然后使用上面的代码编写文本.
很明显,此任务中不存在该文件,因为我只有该名称.这就是为什么我认为write方法的错误信息是正确的.
我现在正在寻找的是一步创建文件/写文本的可能性.
Bog*_*kov 19
Swift 3示例:
func write(text: String, to fileNamed: String, folder: String = "SavedFiles") {
guard let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first else { return }
guard let writePath = NSURL(fileURLWithPath: path).appendingPathComponent(folder) else { return }
try? FileManager.default.createDirectory(atPath: writePath.path, withIntermediateDirectories: true)
let file = writePath.appendingPathComponent(fileNamed + ".txt")
try? text.write(to: file, atomically: false, encoding: String.Encoding.utf8)
}
Run Code Online (Sandbox Code Playgroud)
我最近尝试这样做时遇到了一些问题:
"my string".writeToURL...
Run Code Online (Sandbox Code Playgroud)
本教程中有多少内容向您展示了如何做到这一点。最终我想出了这个方法(是 swift 2.3,对此我深表歉意)。我一直收到错误消息,说我没有写入权限。然后我开始发现你的错误。底部为我工作。参数file是您想要的文件名。
func writeDataToFile(file: String)-> Bool{
let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0])
let logsPath = documentsPath.URLByAppendingPathComponent("yourFolderDirectory")
do {
try NSFileManager.defaultManager().createDirectoryAtPath(logsPath!.path!, withIntermediateDirectories: true, attributes: nil)
} catch let error as NSError {
NSLog("Unable to create directory \(error.debugDescription)")
}
let str = "hello world"
let fileName = logsPath?.URLByAppendingPathComponent(file + ".txt")
do{
try str.writeToURL(fileName!, atomically: false, encoding: NSUTF8StringEncoding)
return true
} catch let error as NSError {
print("Ooops! Something went wrong: \(error)")
return false
}
}
Run Code Online (Sandbox Code Playgroud)