我在我的程序中写了这个日志轮换。
QFileInfo log("log.txt");
int currentM = QDate::currentDate().month();
int createM = log.created().toString("MM").toInt();
if (createM != 0)
{
if (currentM > createM)
{
char oldn[] = "log.txt";
char newn[] = "oldlog.txt";
QFile::remove(newn);
QFile::rename(oldn, newn);
}
}
fileDebug = fopen("log.txt", "a+t");
fprintf(fileDebug, %s Log started\n, QDateTime:: currentDateTime().toString("hh:mm:ss dd.MM.yyyy").toLocal8Bit().constData());
qInstallMessageHandler(myMessageOutput);
每个月写入的日志都会重命名为 oldlog,在此之前旧的 oldlog 会被删除。然后程序创建一个名为 log 的新文件并写入它。
问题是新的 log.txt 文件是用旧日志的创建日期创建的,我不知道为什么。
同时,如果两个日志都被删除 - 旧的和新的 - 即程序将没有什么可删除和重命名的,它将创建一个具有正常创建日期的新日志。
检查删除和重命名工作是否准确。我尝试在收到日期后立即添加 QFileInfo 类的析构函数 - 它没有帮助。
为什么程序会这样做?如何强制它创建具有真实创建日期的文件?
Qt 中没有工具可以更改文件的日期,但这可以使用 WinAPI 完成。然后必须使用CreateFileA而非 fopen 创建文件。更改时间的函数:SetFileTime。