文件输出覆盖第一行 - C++
File output overwrites first line - C++
我正在为我的程序创建一个简单的日志记录系统。我有一个函数,每当在我的程序的成员函数中调用时都会输出,这样无论何时采取行动,它都会被记录到一个文本文件中。但是,当我希望每个动作都记录在新行上时,它似乎每次都只覆盖文件的第一行。
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 对象成为 class 成员,然后您的函数将简单地追加到它,或者 (b) 打开文件进行追加,就像这样:
std::ofstream fout(source, std::ofstream::out | std::ofstream::app);
我正在为我的程序创建一个简单的日志记录系统。我有一个函数,每当在我的程序的成员函数中调用时都会输出,这样无论何时采取行动,它都会被记录到一个文本文件中。但是,当我希望每个动作都记录在新行上时,它似乎每次都只覆盖文件的第一行。
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 对象成为 class 成员,然后您的函数将简单地追加到它,或者 (b) 打开文件进行追加,就像这样:
std::ofstream fout(source, std::ofstream::out | std::ofstream::app);