我正在尝试将字符串附加到文本文件中。我正在使用以下代码。
let dirs : [String]? = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true) as? [String]
if (dirs) != nil {
let dir = dirs![0] //documents directory
let path = dir.stringByAppendingPathComponent("votes")
let text = "some text"
//writing
text.writeToFile(path, atomically: true, encoding: NSUTF8StringEncoding, error: nil)
//reading
let text2 = String(contentsOfFile: path, encoding: NSUTF8StringEncoding, error: nil)
println(text2) //prints some text
}
这不会将字符串追加到文件。即使我反复调用此函数。
如果您希望能够控制是否追加,请考虑使用OutputStream
。例如:
SWIFT 3
let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
.appendingPathComponent("votes.txt")
if let outputStream = OutputStream(url: fileURL, append: true) {
outputStream.open()
let text = "some text\n"
let bytesWritten = outputStream.write(text)
if bytesWritten < 0 { print("write failure") }
outputStream.close()
} else {
print("Unable to open file")
}
顺便说一句,这是一个扩展,可以让你轻松地编写String
到OutputStream
:
extension OutputStream {
/// Write `String` to `OutputStream`
///
/// - parameter string: The `String` to write.
/// - parameter encoding: The `String.Encoding` to use when writing the string. This will default to `.utf8`.
/// - parameter allowLossyConversion: Whether to permit lossy conversion when writing the string. Defaults to `false`.
///
/// - returns: Return total number of bytes written upon success. Return `-1` upon failure.
func write(_ string: String, encoding: String.Encoding = .utf8, allowLossyConversion: Bool = false) -> Int {
if let data = string.data(using: encoding, allowLossyConversion: allowLossyConversion) {
return data.withUnsafeBytes { (bytes: UnsafePointer<UInt8>) -> Int in
var pointer = bytes
var bytesRemaining = data.count
var totalBytesWritten = 0
while bytesRemaining > 0 {
let bytesWritten = self.write(pointer, maxLength: bytesRemaining)
if bytesWritten < 0 {
return -1
}
bytesRemaining -= bytesWritten
pointer += bytesWritten
totalBytesWritten += bytesWritten
}
return totalBytesWritten
}
}
return -1
}
}
或者,在 Swift 2中 使用NSOutputStream
:
let documents = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false)
let path = documents.URLByAppendingPathComponent("votes").path!
if let outputStream = NSOutputStream(toFileAtPath: path, append: true) {
outputStream.open()
let text = "some text"
outputStream.write(text)
outputStream.close()
} else {
print("Unable to open file")
}
和
extension NSOutputStream {
/// Write `String` to `NSOutputStream`
///
/// - parameter string: The string to write.
/// - parameter encoding: The NSStringEncoding to use when writing the string. This will default to UTF8.
/// - parameter allowLossyConversion: Whether to permit lossy conversion when writing the string. Defaults to `false`.
///
/// - returns: Return total number of bytes written upon success. Return -1 upon failure.
func write(string: String, encoding: NSStringEncoding = NSUTF8StringEncoding, allowLossyConversion: Bool = false) -> Int {
if let data = string.dataUsingEncoding(encoding, allowLossyConversion: allowLossyConversion) {
var bytes = UnsafePointer<UInt8>(data.bytes)
var bytesRemaining = data.length
var totalBytesWritten = 0
while bytesRemaining > 0 {
let bytesWritten = self.write(bytes, maxLength: bytesRemaining)
if bytesWritten < 0 {
return -1
}
bytesRemaining -= bytesWritten
bytes += bytesWritten
totalBytesWritten += bytesWritten
}
return totalBytesWritten
}
return -1
}
}
问题内容: 我曾尝试打印它,但由于它是转义字符,因此只是通过而已。例如,输出应如下。 提前致谢 问题答案: 为此以及将来的参考:
问题内容: 我有以下bash代码,该代码逐行循环通过文本文件.. im试图为每行添加工作前缀’prefix’,但是却出现此错误: 这是bash脚本.. 我在这里做错了什么? 更新:从头开始将所有行都转储到终端的一行中,可能相关吗? 问题答案: 单行awk命令也可以做到这一点:
问题内容: 给我 : 我想打印输出: 问题答案: 你需要将{{和加倍}}: 这是Python文档中有关格式字符串语法的相关部分: 格式字符串包含用花括号括起来的“替换字段” 。花括号中不包含的所有内容均视为文字文本,该文本原样复制到输出中。如果需要在文字文本中包含大括号字符,可以通过加倍:{{和来对其进行转义。
我正在尝试VS2012 RC,但发现一个好的特性不再可用(或者如果它仍然可用,请告诉我):在VS2010中,如果我知道一个文件名,例如,我可以通过键入ctrl+d(或指定的任何快捷方式)去查找工具来快速打开它,然后键入,然后文件就会打开,而且更方便的是,这将对文件名进行增量搜索。在整个过程中,我根本不需要使用鼠标。 VS2012中新的快速启动工具只在打开的文件中搜索,这真的不是我想要的。VS201
问题内容: 我需要一条SQL更新语句来更新所有行的特定字段,并在现有值的前面添加一个字符串“ test”。 例如,如果现有值为“ try”,则应变为“ testtry”。 问题答案: 您可以使用CONCAT函数来执行此操作: 如果您想更聪明地只更新尚未预先测试的列,请尝试
问题内容: 如果我有一个字符串变量: 我想在每一个前面加一个转义字符和 变量中 (即 未 竟逃脱字符),我该怎么做? 问题答案: 我不是在这里要求优雅,但我 认为 它可以满足您的要求(如果我误会了,请纠正我): 输出