0

髪を引っ張らずに多言語でQFileファイルを開く必要があります。QStringしかし、std::streamAPI を介してこれらのファイルのデータを管理する必要もあります。多くの人が示唆するように、私はかつてstd::fstream stdFile(fdopen(qtFile.handle(), mode));そうしていました。

ただし、繰り返し操作を行うと問題が発生しました。一定量のファイル処理の後、アプリケーションがクラッシュします。

次のコードでクラッシュを再現できます。

int fileOperationCount = 0;
while (true)
{
    QFile qtFile("plop.txt");
    qtFile.open(QIODevice::ReadOnly);
    std::ifstream file = std::ifstream(fdopen(qtFile.handle(), "rb"));

    if (!file.good())
        throw std::exception();
    file.seekg(0, file.beg);
    if (!file.good())
        throw std::exception(); //Will ALWAYS trigger at fileOperationCount = 509

    qtFile.close();

    fileOperationCount++;
}

509 号機はseekg. また、何百もの異なるファイルを操作した場合にも発生します。509回目にファイルを読み込もうとすると、それでもクラッシュします。

私が間違っていることは何ですか?

4

1 に答える 1

1
   int fileOperationCount = 0;
    while (true)
    {
        std::ifstream file ("plop.txt",std::ios::in);

        if (!file.good())
            throw std::exception();
        file.seekg(0, file.beg);
        if (!file.good())
            throw std::exception();

        file.close();
        fileOperationCount++;
    }

このバージョンは、ファイルが存在する場合に機能し、存在しない場合は file.good() が eof のために false になります (私はそう思います)。翻訳にQtを使用したい場合は、使用できます

            std::ifstream file (QObject::tr("plop.txt"),std::ios::in);

または、関数が QObject 内にある場合は、より適切なコンテキストのために単に tr("..") を使用します。

于 2015-08-21T23:33:47.120 に答える