Swift 将字符串添加到文件顶部

Swift 将字符串添加到文件顶部,swift,append,Swift,Append,我想在文件的开头和结尾添加一个字符串 我在末尾加了一个字符串,就像这样 func writeToFile(content: String, fileName: String) { let contentToAppend = content+"\n" let filePath = NSHomeDirectory() + "/Documents/" + fileName //Check if file exists if let fileHandle = File

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

我在末尾加了一个字符串,就像这样

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)
,但它从文件中删除了我的第一行。我想在文件的开头添加两行文本。任何帮助都将不胜感激

不能使用文件句柄将数据插入现有文件。它只支持覆盖文件的全部或部分内容,或在文件末尾追加内容

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

这是一个扩展名,可用于将现有文件的内容添加到文件句柄。假设文件句柄已设置为写入

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()
    }
}
使用此功能,您的问题的解决方案可通过以下步骤实现:

  • 创建用于写入新文件的FileHandler
  • 写入起始字符串的数据
  • 调用FileManager.default.appendContentsOfFile(在:someFileURL,到:yourFileHandle)添加现有文件
  • 写入结束字符串的数据
  • 关上把手
  • (可选)删除旧文件,重命名新文件

  • 不能使用文件句柄将数据插入现有文件。它只支持覆盖文件的全部或部分内容,或在文件末尾追加内容

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

    这是一个扩展名,可用于将现有文件的内容添加到文件句柄。假设文件句柄已设置为写入

    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()
        }
    }
    
    使用此功能,您的问题的解决方案可通过以下步骤实现:

  • 创建用于写入新文件的FileHandler
  • 写入起始字符串的数据
  • 调用FileManager.default.appendContentsOfFile(在:someFileURL,到:yourFileHandle)添加现有文件
  • 写入结束字符串的数据
  • 关上把手
  • (可选)删除旧文件,重命名新文件

  • 谢谢你的回复。我用开头的内容创建了file1,然后在原始文件的末尾添加了字符串。现在我想在file1的末尾添加原始文件(开始文本文件)。如果我不清楚,请告诉我。如果原始文件很小,请加载到
    Data
    实例中,并将该数据写入新文件,就像写入字符串数据一样。如果文件太大,请使用文件流并以可管理的数据块读取流。我的原始文件太大。我需要选择你建议的第二个选择。有没有可能提供一个示例代码或文档以供遵循?太棒了!!非常感谢,谢谢你的回复。我用开头的内容创建了file1,然后在原始文件的末尾添加了字符串。现在我想在file1的末尾添加原始文件(开始文本文件)。如果我不清楚,请告诉我。如果原始文件很小,请加载到
    Data
    实例中,并将该数据写入新文件,就像写入字符串数据一样。如果文件太大,请使用文件流并以可管理的数据块读取流。我的原始文件太大。我需要选择你建议的第二个选择。有没有可能提供一个示例代码或文档以供遵循?太棒了!!多谢各位。