如何在不重写同一行的情况下写入文件?

时间:2014-12-05 05:52:21

标签: xcode swift

我有一个从文件中逐行读取并将其保存到变量line中的函数。我试图让它读取一行并将其写入另一个文件。读取下一行并将该行添加到文件中。我有这段代码:

if let readFileObj = ReadWriteManager(path: readFilePath!) {
        while let line = readFileObj.nextLine() {
            println(line)
        line.writeToFile(NSHomeDirectory().stringByAppendingPathComponent("Documents").stringByAppendingPathComponent("textfile.txt"), atomically: false, encoding: NSUTF8StringEncoding, error: nil)
        }
}

我有一个类ReadWriteManager,它接受​​要读取的文件的路径。该类有一个函数nextLine(),它以字符串形式返回文件的下一行。当我println时,我的控制台输出屏幕显示所有文件内容。不幸的是,当我尝试使用textfile.txt将其写入文件.writeToFile()时,它会一遍又一遍地重写同一行。因此,当我检查文件是否成功复制时,它只显示已读取文件的最后一行。如何才能使它写入一行然后写入下一行,而不是一遍又一遍地重写同一行?我非常感谢你的帮助!曾经偶然发现了一段时间:(

这是我要阅读的文件:

Sample
Text With
Multiple
Lines
}

我的输出控制台显示:

Sample
Text With
Multiple
Lines
}

但我写的文件只显示最后一行:

}

编辑:这是解决方案

let writeFileHandle = NSFileHandle(forWritingAtPath: myWriteFile) // Declare the write file handler
while var lineRead = readFileObj?.nextLine() { // Read line by line from the template
        lineRead += "\n"
        let data = (lineRead as NSString).dataUsingEncoding(NSUTF8StringEncoding) // Convert the String to NSData object
        writeFileHandle?.writeData(data!) // Write the NSData object to the file
}

1 个答案:

答案 0 :(得分:2)

方法-[NSString writeToFile:atomically:encoding:error:]写出包含该字符串的文件。该字符串构成新文件的全部内容。这就是它的作用。

您需要使用完全不同的方法。例如,您可以在循环之前使用NSFileHandle创建+fileHandleForWritingAtPath:,然后使用-writeData:重复写入-[NSString dataUsingEncoding:]。您需要使用{{1}}将字符串转换为数据对象。如果你的字符串还没有换行符,你需要在转换为数据对象之前附加它们。