在Swift中将文本或数据添加到文本文件

我需要将数据(字符串)附加到文本文件的末尾。

一种显而易见的方法是从磁盘读取文件,并将字符串附加到文件末尾再写回,但这种方法效率不高,尤其是在处理大型文件并经常处理的情况下。


因此,问题是“如何在不读取文件并将整个内容写回的情况下,将字符串附加到文本文件的末尾”?


到目前为止,我有:


    let dir:NSURL = NSFileManager.defaultManager().URLsForDirectory(NSSearchPathDirectory.CachesDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask).last as NSURL

    let fileurl =  dir.URLByAppendingPathComponent("log.txt")

    var err:NSError?

    // until we find a way to append stuff to files

    if let current_content_of_file = NSString(contentsOfURL: fileurl, encoding: NSUTF8StringEncoding, error: &err) {

        "\(current_content_of_file)\n\(NSDate()) -> \(object)".writeToURL(fileurl, atomically: true, encoding: NSUTF8StringEncoding, error: &err)

    }else {

        "\(NSDate()) -> \(object)".writeToURL(fileurl, atomically: true, encoding: NSUTF8StringEncoding, error: &err)

    }

    if err != nil{

        println("CANNOT LOG: \(err)")

    }


叮当猫咪
浏览 1281回答 3
3回答

慕运维8079593

这是Swift 2的版本,使用String和NSData的扩展方法。//: Playground - noun: a place where people can playimport UIKitextension String {    func appendLineToURL(fileURL: NSURL) throws {        try self.stringByAppendingString("\n").appendToURL(fileURL)    }    func appendToURL(fileURL: NSURL) throws {        let data = self.dataUsingEncoding(NSUTF8StringEncoding)!        try data.appendToURL(fileURL)    }}extension NSData {    func appendToURL(fileURL: NSURL) throws {        if let fileHandle = try? NSFileHandle(forWritingToURL: fileURL) {            defer {                fileHandle.closeFile()            }            fileHandle.seekToEndOfFile()            fileHandle.writeData(self)        }        else {            try writeToURL(fileURL, options: .DataWritingAtomic)        }    }}// Testdo {    let url = NSURL(fileURLWithPath: "test.log")    try "Test \(NSDate())".appendLineToURL(url)    let result = try String(contentsOfURL: url)}catch {    print("Could not write to file")}
打开App,查看更多内容
随时随地看视频慕课网APP