为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

叮当猫咪 2019-12-03 14:22:05
我需要将数据(字符串)附加到文本文件的末尾。一种显而易见的方法是从磁盘读取文件,并将字符串附加到文件末尾再写回,但这种方法效率不高,尤其是在处理大型文件并经常处理的情况下。因此,问题是“如何在不读取文件并将整个内容写回的情况下,将字符串附加到文本文件的末尾”?到目前为止,我有:    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)")    }
查看完整描述

3 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

这是Swift 2的版本,使用String和NSData的扩展方法。


//: Playground - noun: a place where people can play


import UIKit


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

        }

    }

}


// Test

do {

    let url = NSURL(fileURLWithPath: "test.log")

    try "Test \(NSDate())".appendLineToURL(url)

    let result = try String(contentsOfURL: url)

}

catch {

    print("Could not write to file")

}


查看完整回答
反对 回复 2019-12-03
  • 3 回答
  • 0 关注
  • 1280 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信