我有一个从文件中逐行读取并将其保存到变量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
}
答案 0 :(得分:2)
方法-[NSString writeToFile:atomically:encoding:error:]
写出包含该字符串的文件。该字符串构成新文件的全部内容。这就是它的作用。
您需要使用完全不同的方法。例如,您可以在循环之前使用NSFileHandle
创建+fileHandleForWritingAtPath:
,然后使用-writeData:
重复写入-[NSString dataUsingEncoding:]
。您需要使用{{1}}将字符串转换为数据对象。如果你的字符串还没有换行符,你需要在转换为数据对象之前附加它们。