文件输出覆盖第一行 - C++

File output overwrites first line - C++

本文关键字:一行 C++ 输出 覆盖 文件      更新时间:2023-10-16

im 为我的程序创建一个简单的日志记录系统。我有一个函数,每当在程序的成员函数中调用时都会输出,因此每当执行操作时,它都会记录到文本文件中。但是,当我希望每个操作都记录在新行上时,它似乎每次都会覆盖文件的第一行。

void Logger::log(int level, std::string message, std::string source)
{
    time_t rawtime;
    struct tm * timeinfo;
    char buffer[80];
    time (&rawtime);
    timeinfo = localtime(&rawtime);
    strftime(buffer,80,"%d-%m-%Y %I:%M:%S",timeinfo);
    std::string str(buffer);
    std::ofstream fout(source);
    if (fout.is_open())
    {
        fout<<"Logging Level: "<<level<< " - "  << str <<" - " << message <<std::endl;
        fout<<"test"<<std::endl;
        fout.close();
    }
}

无论调用的次数如何,记录器都只会(正确)输出上次执行的操作。谁能让我知道为什么这不起作用?

文件输出:

Logging Level: 1 - 15-01-2015 09:13:58 - Function called: grow()
test

日志调用示例:

arrayLogger.log(1, "Function called: writeOut()", "logger.txt");

您每次都打开文件进行写入,这会覆盖任何现有内容。 您应该 (a) 在该函数外部打开文件,可能通过将 ofstream 对象设置为类成员,然后您的函数将简单地附加到它,或者 (b) 打开文件进行追加,如下所示:

std::ofstream fout(source, std::ofstream::out | std::ofstream::app);