路径错了,该怎么办?

时间:2014-11-17 18:06:04

标签: c++ qt file

我想在我的道路上写点什么。

我的代码正在关注

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;的文件。什么都没有。

你知道错误在哪里吗?

2 个答案:

答案 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和70F

http://www.asciitable.com/

因此,我强烈建议您使用QString::number来防止错误。