我可以只将最后50行控制台输出自动写入文件吗?
Can I only write last 50 lines console output to a file automatically
是否可能只自动将控制台输出的最后50行写入文件?
使文件总是被最近的50行覆盖
您可以使用shell修改和重定向程序的输出:
my_program | tail -n 50 > my_file
如果你想截断文件,使用简单重定向>
;如果你想追加文件,使用双重重定向>>
。
注意:
此方法仅在需要重定向标准输出时重定向标准输出,将2>&1
放在my_program
之后
如果您真的想在c++中这样做,您可以在程序运行时将控制台输出逐行存储在容器中,并在需要时将最后50行写入文件。
为输出函数编写一个包装器,每次向控制台打印一行时,将其添加到std::queue
。如果这使得您的队列大于50个元素,则弹出最老的元素(只需调用pop()
)。
class Logger {
static std::queue<string> lastFifty;
public static void log(const std::string& str) {
lastFifty.push(str);
if (lastFifty.size() > 50) {
lastFifty.pop();
}
std::cout << str;
}
public static void dumpToFile(std::ofstream& file) {
while (!lastFifty.empty()) {
file << lastFifty.pop();
}
}
}
相关文章:
- 如何在 的开头<x>和结尾<y>之间更改带有文件输出的字符串的值
- C++对象数组的文件输出
- bcdedit 文件输出不起作用,但其他命令可以
- 如何从文本文件输出数据?(学生成绩单计划)
- 使用 C++文件 I/O 输出 pdf 文件
- C 文件输出垃圾
- 从堆栈中读取字符后,如何修复不正确的文件输出
- C++:具有随机名称的文件输出
- 在命令提示符下看到换行符,但在文件输出中可以看到 相同的字符串
- 生成文件不会生成预期的文件输出
- C++11 fgetc 在"r+b"模式下使用时向我的文件输出 0
- 使用函数从文件输出
- GCC.obj文件输出不具有确定性(.debug_info,PROGPITS部分)
- C cstdiofile :: Writestring给出了不正确的文件输出
- C 输出:STD :: COUT和文件输出没有相同的内容
- GCC和MSVC之间的文件输出不一致
- C++文件输出奇怪的数字,并且部分代码没有运行
- 如何将特定字符从TXT文件输出到特定点
- C 调用从TXT文件输出信息的函数
- 将交易从文本文件输出到屏幕