2017-02-21 66 views
4

您好,我對swift編程頗爲陌生,所以如果我犯了明顯錯誤,請耐心等待。我正在嘗試將用戶通過文本字段輸入的數據寫入文本文件。我可以通過我在下面寫的代碼成功地做到這一點。但是,當我試圖保存更多的數據時,它將用正在保存的新數據替換文本文件中的現有數據。例如,如果我保存字符串'hello world',然後保存另一個字符串說'再見'。我只會在文本文件中看到字符串'bye'。有沒有辦法可以修改我的代碼,這樣我就可以在紡織品的一條線上看到'hello world',在另一條線上看到'再見'。在swift中寫入文本文件3

@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) 
    } 

給予任何幫助是極大的讚賞 三江源

+0

你應該使用NSFileHandle,它可以尋找到文件的結尾 – Sneha

回答

6

下面是使用FIleHandler,適應斯威夫特3爲例,從here(當然你要添加的所有錯誤處理代碼,缺少在我例如):

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) 
}