我可以只将最后50行控制台输出自动写入文件吗?

Can I only write last 50 lines console output to a file automatically

本文关键字:文件 输出 最后 50行 控制台 我可以      更新时间:2023-10-16

是否可能只自动将控制台输出的最后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();
        }
    }
}