c++ 多次写入数据到文件时,如何接着上一次的位置往后写
时间: 2024-10-17 13:10:14 浏览: 16
在 C++ 中,如果你想在多次写入数据到文件时从上次写入的位置开始,而不是覆盖整个文件,你可以使用文件的 `seekg` 和 `tellg` 成员函数配合 `ios_base::app` 模式(追加模式)。这样每次写入都会添加到文件末尾。
首先,你需要保存当前文件指针的位置(即上一次写入后的位置),然后再进行下一次写入:
```cpp
#include <fstream>
#include <streambuf>
// 检查并获取文件位置
std::ifstream checkFile("example.txt", std::ios::in | std::ios::binary | std::ios::ate);
if (!checkFile) {
// 文件不存在或无法打开,直接创建新文件
std::ofstream output("example.txt", std::ios::out | std::ios::binary);
} else {
size_t fileSize = checkFile.tellg();
checkFile.seekg(0, std::ios::beg); // 移动回文件开头
// 创建 ofstream 并指定从文件尾部开始
std::ofstream output("example.txt", std::ios::app | std::ios::binary);
if (output.is_open()) {
// 从上次写入的位置开始写入
output.write(reinterpret_cast<char*>(fileSize), 1); // 写入位置信息
// 然后写入你的数据...
} else {
// 输出错误信息
std::cerr << "Failed to open file for appending.\n";
}
}
```
这里我们先检查文件是否存在,并计算出上次写入后的位置。然后使用 `ios_base::app` 模式将输出流定位到文件末尾。如果一切顺利,我们在写入之前还会插入一个表示当前位置的字节,以便下次知道在哪里继续。
注意:这个示例假设了文件大小可以适当地存储在单个字节内。如果你需要更精确地控制位置,可能需要使用更大的结构体或第三方库。
阅读全文