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++;
}

509th 将在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 为假(我认为)。如果您想使用 Qt 进行翻译,您可以使用

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

或者如果函数在 QObject 中,则使用 tr("..") 以获得更好的上下文。

于 2015-08-21T23:33:47.120 回答