是否可以自动将最后50行控制台输出写入文件?
这样文件总是被最新的50行覆盖。
答案 0 :(得分:3)
您可以使用shell修改和重定向程序的输出:
my_program | tail -n 50 > my_file
如果要截断文件,请使用简单重定向>
;如果要追加文件,请使用双重重定向>>
。
注意:
如果您需要在2>&1
my_program
,此方法仅重定向stdout
答案 1 :(得分:1)
如果您真的想在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();
}
}
}