在文件顶部添加一个字符串

时间:2018-07-04 14:31:44

标签: swift append

我想在文件的开头和结尾添加一个字符串。

我要像这样在末尾附加一个字符串,

func writeToFile(content: String, fileName: String) {

    let contentToAppend = content+"\n"
    let filePath = NSHomeDirectory() + "/Documents/" + fileName

    //Check if file exists
    if let fileHandle = FileHandle(forWritingAtPath: filePath) {
        //Append to file
        fileHandle.seekToEndOfFile()

        fileHandle.write(contentToAppend.data(using: String.Encoding.utf8)!)
    }
    else {
        //Create new file
        do {
            try contentToAppend.write(toFile: filePath, atomically: true, encoding: String.Encoding.utf8)
        } catch {
            print("Error creating \(filePath)")
        }
    }
}

我尝试了fileHandle.seek(toFileOffset: 0),但是它从文件中删除了我的第一行。我想在文件开头添加2行文本。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:2)

您不能使用文件句柄将数据插入到现有文件中。它仅支持覆盖文件的全部或部分,或附加到文件末尾。

您需要先创建一个新文件,方法是首先在开头写入所需的字符串,然后写入现有文件的内容,然后在末尾写入所需的字符串。

这是扩展名,可以用来将现有文件的内容添加到文件句柄中。假定已设置文件句柄以进行写入。

extension FileManager {
    func appendContentsOfFile(at fileURL: URL, to outputHandle: FileHandle) throws {
        let inputHandle = try FileHandle(forReadingFrom: fileURL)
        while true {
            let data = inputHandle.readData(ofLength: 4096)
            if data.isEmpty {
                break
            } else {
                outputHandle.write(data)
            }
        }
        inputHandle.closeFile()
    }
}

使用此步骤,可以通过以下步骤解决您的问题:

  1. 创建一个FileHandler来写入新文件。
  2. 为起始字符串写数据。
  3. 调用FileManager.default.appendContentsOfFile(位于:someFileURL,至:yourFileHandle)以添加现有文件。
  4. 为结束字符串写数据。
  5. 关闭手柄。
  6. (可选)删除旧文件,重命名新文件。