我需要使用QFile
和QString
打开多语言文件,而不需要拔毛。但我还需要通过std::stream
API管理这些文件的数据。正如许多人建议的那样,我使用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次尝试读取文件,任何文件时都会崩溃。
知道我做错了吗?
答案 0 :(得分: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++;
}
如果该文件存在,则此版本有效,如果由于eof(我认为)而没有file.good()为false。如果您想使用Qt进行翻译,可以使用
std::ifstream file (QObject::tr("plop.txt"),std::ios::in);
或者如果函数在QObject内,只使用tr(“..”)来获得更好的上下文。