我想在我的道路上写点什么。
我的代码正在关注
QString Log::logPacketsPath = QDir::currentPath() + "/logs/Packets/";
int userID = 1;
QString text = "test 1 2 3";
QFile logPacketFile(logPacketsPath + "UserID: " + userID + " - " + QDateTime::currentDateTime().toString("dd.MM.yy") + ".log");
if (logPacketFile.open(QFile::WriteOnly | QFile::Text | QFile::Append))
{
QTextStream out(&logPacketFile);
out << "[" << QDateTime::currentDateTime().toString("dd.MM.yy, hh:mm:ss") << "]: " << text << "\n";
logPacketFile.close();
}
但它只创建名为&#34; UserID&#34;的文件。什么都没有。
你知道错误在哪里吗?
答案 0 :(得分:3)
我不确定您使用的是哪种操作系统,但Windows文件名中的“:”无效。
接下来,在关闭文件之前,您应该flush QTextStream
:
out.flush();
logPacketFile.close();
或创建其他范围:
{
QTextStream out(&logPacketFile);
out << "[" << QDateTime::currentDateTime().toString("dd.MM.yy, hh:mm:ss") << "]: " << text << "\n";
}
logPacketFile.close();
另外,正如Chemobyl所指出的那样,通过将int userID
合并到文件路径中可能会遇到麻烦。我建议使用字符串格式来创建文件名:
QString logPacketFile("%1UserID%2 - %3.log")
.arg(logPacketsPath)
.arg(userID)
.arg(QDateTime::currentDateTime().toString("dd.MM.yy"));
答案 1 :(得分:1)
将int
转换为QString
:
使用QString::number().
使用您当前的代码输出:
"C:/.../logs/Packets/UserID [bad symbols here] - 17.11.14.log"
用
输出QFile logPacketFile(logPacketsPath + "UserID " + QString::number(userID) + " - " + QDateTime::currentDateTime().toString("dd.MM.yy") + ".log");//removed colon
是:
"C:/.../logs/Packets/UserID 1 - 17.11.14.log"
是大麻烦的根源。见下:
int userID = 70;
QString text = "test 1 2 3";
QFile logPacketFile(logPacketsPath + "UserID " + userID + " - " + QDateTime::currentDateTime().toString("dd.MM.yy") + ".log");
输出:
.../UserID F - 17.11.14.log"
注意F
,而不是70
,因为operator+认为您在char中使用简单的char和70
是F
:
因此,我强烈建议您使用QString::number
来防止错误。