我想使用 ofstream 將行寫入檔案 10 次,并且我希望將第 11 行寫入第 1 行,第 12 行寫入第 2 行,依此類推(這樣我的檔案將始終有 10 行,以保留日志檔案大小)。到目前為止,我最好的嘗試涉及回圈緩沖區,如下所示:
#include <cstdio>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
?
int main()
{
ifstream myfile("new.txt");
string line, buffer[10];
const size_t size = sizeof buffer / sizeof * buffer;
size_t i = 0;
?
while (getline(myfile, line))
{
buffer[i] = line;
if ( i >= size)
{
i = 0;
}
}
?
ofstream myfileo("new.txt");
for (size_t j = 0; j < size; j)
{
myfileo << buffer[i] << "\n";
if ( i >= size)
{
i = 0;
}
}
myfileo << "hey";
return 0;
}
但這往往只適用于 VS Windows,而不適用于在具有實時資料的 linux 上運行的實際 C 代碼(我知道這很愚蠢)。“實時資料”部分是 myfileo << "hey" 行。
在 C 中創建一個只有 10 行的日志檔案真的有那么難嗎?!我認為另一個很好的嘗試是在到達一定數量的行后創建新的日志檔案并洗掉以前的日志檔案,但我不知道我該怎么寫!謝謝
uj5u.com熱心網友回復:
您可以通過執行以下操作來獲得所需的行為
myfileo.seekp(0, std::ios_base::beg);
... 每次您剛剛寫完第十行文本時。這會將檔案的寫入位置移回檔案頂部,然后您將覆寫檔案的現有內容,而不是使檔案變大。
我說“有點”,因為除非所有文本行的長度完全相同,否則只要前 10 行比新的 10 行長,檔案末尾就會有一些剩余的位元組線。也許這對你的目的來說是可以接受的,我不知道。
另一種可能的方法是myfileo.close()在 10 行之后使用 ofstream 和myfileo.open()一個具有不同名稱的新檔案,然后開始寫入該檔案。然后當新檔案“滿”時,洗掉舊檔案,并重復該程序。這樣你的磁盤上總是有兩個檔案,一個完整的 10 行“舊”檔案和一個較小的(<10 行)“進行中”檔案;優點是這兩個檔案在任何時候都是格式良好的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/315037.html
