0

私は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\0");
            break;
        case (HIGH):
            file->write("1\0");
            break;
        case (NORMAL):
            file->write("2\0");
            break;
        case (LOW):
            file->write("3\0");
            break;
        case (VERY_LOW):
            file->write("4\0");
            break;
        }
        switch (t[i]->ShowState())
        {
        case (STILL_BEGIN):
            file->write("0\0");
            break;
        case (BEGUN):
            file->write("1\0");
            break;
        case (ALMOST_DONE):
            file->write("2\0");
            break;
        case (DONE):
            file->write("3\0");
            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 を作成しました ...

ファイル名は問題なく正しく渡されます...デバッグは表示されないため、理論的には動作するはずですが、フォルダーにファイルが見つかりません...よろしくお願いします

4

2 に答える 2

1

QFile::open別の方法を使用する必要があるようです。使用するメソッドは既存のファイル ハンドルを開くため、stdin. 以前に設定したファイル名は関係ありません。

これを試して:

if( !file->open(QIODevice::WriteOnly))
        qDebug() << "Could not create file " << fileName << endl;
于 2012-08-20T15:02:40.703 に答える
1

stdin へのこの参照は偽物に見えます:

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

stdin書くためではなく読むためです。

代わりにこのフォームを使用することをお勧めします:

bool QFile::open ( OpenMode mode )

どこmodeだろうQIODevice::WriteOnly

于 2012-08-20T15:03:17.590 に答える