打开QT文件不会创建文件

QT file open does not create a file

本文关键字:文件 创建 打开 QT      更新时间:2023-10-16

我正在尝试使用QT打开一个文件并写入:

void fileClass::saver(QList<ToDo *> t, QList<appointment *> a, QString fileName)
{
    fileName.append(".mca");
    file = new QFile(fileName);
    if( !file->open(stdin,QIODevice::WriteOnly))
        qDebug() << "Could not create file " << fileName << endl;
    for (int i = 0; i < t.count(); i++)
    {
        file->write(t[i]->ShowDate().toString().toAscii().constData(), qstrlen(t[i]->ShowDate().toString().toAscii().constData()));
        file->write(t[i]->ShowDescription().toAscii().constData(), qstrlen(t[i]->ShowDescription().toAscii().constData()));
        file->write(t[i]->ShowStart().toString().toAscii().constData(), qstrlen(t[i]->ShowStart().toString().toAscii().constData()));
        file->write(t[i]->ShowTitle().toAscii().constData(), qstrlen(t[i]->ShowTitle().toAscii().constData()));
        file->write(t[i]->ShowWarning().toString().toAscii().constData(), qstrlen(t[i]->ShowWarning().toString().toAscii().constData()));
        file->write(t[i]->ShowWarningTime().toString().toAscii().constData(), qstrlen(t[i]->ShowWarningTime().toString().toAscii().constData()));
        switch (t[i]->ShowPriority())
        {
        case (VERY_HIGH):
            file->write("0");
            break;
        case (HIGH):
            file->write("1");
            break;
        case (NORMAL):
            file->write("2");
            break;
        case (LOW):
            file->write("3");
            break;
        case (VERY_LOW):
            file->write("4");
            break;
        }
        switch (t[i]->ShowState())
        {
        case (STILL_BEGIN):
            file->write("0");
            break;
        case (BEGUN):
            file->write("1");
            break;
        case (ALMOST_DONE):
            file->write("2");
            break;
        case (DONE):
            file->write("3");
            break;
        }
    }
    file->write("----------------------------------------------------------");
    for(int i =0; i<a.count(); i++)
    {
        file->write(a[i]->ShowDate().toString().toAscii().constData(), qstrlen(a[i]->ShowDate().toString().toAscii().constData()));
        file->write(a[i]->ShowDescription().toAscii().constData(), qstrlen(a[i]->ShowDescription().toAscii().constData()));
        file->write(a[i]->ShowEnd().toString().toAscii().constData(), qstrlen(a[i]->ShowEnd().toString().toAscii().constData()));
        file->write(a[i]->ShowReminder().toString().toAscii().constData(), qstrlen(a[i]->ShowReminder().toString().toAscii().constData()));
        file->write(a[i]->ShowStart().toString().toAscii().constData(), qstrlen(a[i]->ShowStart().toString().toAscii().constData()));
        file->write(a[i]->ShowTitle().toAscii().constData(), qstrlen(a[i]->ShowTitle().toAscii().constData()));
    }
    file->close();
}

但是文件却没有以某种方式创建?知道为什么吗?我自己做了扩展。mca…

文件名传递正确,没有任何问题。。。并且调试没有显示,所以理论上它应该可以工作,但在我的文件夹中找不到文件。。。提前感谢

似乎需要使用另一个QFile::open方法。使用的方法打开现有的文件句柄,因此打开stdin。之前设置的文件名并不重要。

试试这个:

if( !file->open(QIODevice::WriteOnly))
        qDebug() << "Could not create file " << fileName << endl;

这个对stdin的引用看起来是假的:

   if( !file->open(stdin,QIODevice::WriteOnly))

stdin是用来读的,不是用来写的。

最好使用此表单:

bool QFile::open ( OpenMode mode )

其中mode将是QIODevice::WriteOnly