在一个实时数据的ofstream文件中始终有N行,可以通过以下步骤实现:
以下是一个示例代码:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
void writeData(const std::string& filename, const std::string& data, int N) {
std::ofstream ofs(filename, std::ios::app); // 打开文件,追加模式
if (!ofs) {
std::cerr << "Failed to open file for writing." << std::endl;
return;
}
std::ifstream ifs(filename); // 打开文件,读取行数
if (!ifs) {
std::cerr << "Failed to open file for reading." << std::endl;
return;
}
int lineCount = 0;
std::string line;
while (std::getline(ifs, line)) {
lineCount++;
}
ifs.close();
if (lineCount < N) {
ofs << data << std::endl; // 直接写入数据
} else {
std::vector<std::string> lines;
ifs.open(filename); // 重新打开文件,读取除最早一行外的数据
if (!ifs) {
std::cerr << "Failed to open file for reading." << std::endl;
return;
}
while (std::getline(ifs, line)) {
lines.push_back(line);
}
ifs.close();
ofs.close();
ofs.open(filename, std::ios::trunc); // 打开文件,截断模式
for (int i = 1; i < lineCount; i++) {
ofs << lines[i] << std::endl; // 重新写入除最早一行外的数据
}
ofs << data << std::endl; // 写入新数据
}
ofs.close();
}
int main() {
std::string filename = "data.txt";
std::string data = "New data";
int N = 5;
writeData(filename, data, N);
return 0;
}
这段代码会将新的数据写入到名为"data.txt"的文件中,并保持文件中始终有N行数据。如果行数超过N,则会删除最早的一行数据。
领取专属 10元无门槛券
手把手带您无忧上云