在swift 3中写入文本文件

时间:2017-02-21 11:00:08

标签: swift3 ios10 writetofile

嗨,我对快速编程很新,所以如果我犯了明显的错误,请耐心等待。我试图将用户通过文本字段输入的数据写入文本文件。我可以通过下面编写的代码成功完成此操作。但是,当我尝试保存更多数据时,它将使用正在保存的新数据替换文本文件中的现有数据。例如,如果我保存字符串' hello world'然后保存另一个字符串' bye'。我只会看到字符串' bye'在文本文件中。有没有办法可以修改我的代码,这样我就可以看到“你好世界”#39;在纺织品的一条线上,再见'在另一个。

 @IBAction func btnclicked(_ sender: Any) {

    self.savedata(value: answer.text!)
}


func savedata (value: String){


let fileName = "Test"
    let DocumentDirURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)

    let fileURL = DocumentDirURL.appendingPathComponent(fileName).appendingPathExtension("txt")
    print("FilePath: \(fileURL.path)")

    let writeString = NSString(string: answer.text!)
    do {
        // Write to the file
        try writeString.write(to: fileURL, atomically: true, encoding: String.Encoding.utf8.rawValue)
    } catch let error as NSError {
        print("Failed writing to URL: \(fileURL), Error: " + error.localizedDescription)
    }

非常感谢任何帮助 THANKYOU

2 个答案:

答案 0 :(得分:7)

这是一个使用FIleHandler的示例,适用于来自here Swift 3 (当然,您应该添加所有错误处理代码我的例子):

let dir = FileManager.default.urls(for: FileManager.SearchPathDirectory.cachesDirectory, in: FileManager.SearchPathDomainMask.userDomainMask).first!
let fileurl =  dir.appendingPathComponent("log.txt")

let string = "\(NSDate())\n"
let data = string.data(using: .utf8, allowLossyConversion: false)!

if FileManager.default.fileExists(atPath: fileurl.path) {
    if let fileHandle = try? FileHandle(forUpdating: fileurl) {
        fileHandle.seekToEndOfFile()
        fileHandle.write(data)
        fileHandle.closeFile()
    }
} else {
    try! data.write(to: fileurl, options: Data.WritingOptions.atomic)
}

答案 1 :(得分:-1)

这是Swift 4版本作为String的扩展。

extension String {

func writeToFile(fileName: String) {
    guard let dir = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first else {
        return
    }

    let fileUrl = dir.appendingPathComponent(fileName)
    guard let data = self.data(using: .utf8) else {
        return
    }

    guard FileManager.default.fileExists(atPath: fileUrl.path) else {
        try? data.write(to: fileUrl, options: .atomic)
        return
    }

    if let fileHandle = try? FileHandle(forUpdating: fileUrl) {
        fileHandle.seekToEndOfFile()
        fileHandle.write(data)
        fileHandle.closeFile()
    }
}

}