下面是一个使用C++编写的示例,满足你的需求。这个示例在C++中使用了fstream
来处理文件操作,并且使用了<cstdlib>
库中的std::system
函数来检查内存空间:
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
#define LOG_FILE "log.txt"
#define MAX_MEMORY_SIZE_MB 200
class Logger {
public:
Logger() {
clearLogFile();
}
void log(const std::string& message) {
std::ofstream logFile(LOG_FILE, std::ios::app);
if (!logFile.is_open()) {
std::perror("Error opening log file");
if (checkMemorySpace()) {
logFile.open(LOG_FILE, std::ios::app);
if (logFile.is_open()) {
logFile << "Log file created.\n";
logFile.close();
}
}
return;
}
std::time_t now = std::time(0);
std::tm* timeInfo = std::localtime(&now);
logFile << "[" << timeInfo->tm_year + 1900 << "-"
<< timeInfo->tm_mon + 1 << "-"
<< timeInfo->tm_mday << " "
<< timeInfo->tm_hour << ":"
<< timeInfo->tm_min << ":"
<< timeInfo->tm_sec << "] "
<< message << std::endl;
std::cout << message << std::endl; // 输出到控制台
}
private:
void clearLogFile() {
std::ofstream logFile(LOG_FILE, std::ios::trunc);
logFile.close();
}
bool checkMemorySpace() {
std::system("touch temp_file");
std::ifstream tempFile("temp_file");
if (tempFile.is_open()) {
tempFile.seekg(MAX_MEMORY_SIZE_MB * 1024 * 1024 - 1, std::ios::cur);
tempFile.put('\0');
tempFile.close();
std::system("rm temp_file");
return true;
}
return false;
}
};
int main() {
Logger logger;
logger.log("日志已清空并开始记录");
logger.log("这是一个信息");
// 其他代码...
return 0;
}
这个示例在Logger
类中包含了清空日志文件的方法clearLogFile
和检查内存空间的方法checkMemorySpace
。在log
方法中,首先尝试打开日志文件,如果打开失败,则检查内存空间,如果内存足够,则创建新的日志文件。