无法使用Qt 5读取文本文件

4
我写了一段简单的代码,使用Qt 5的QFile打开纯文本文件,如下所示:
// main.cpp
#include <iostream>
using std::endl;
using std::cout;

#include <QCoreApplication>
#include <QFile>
#include <QIODevice>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile plainFile("plain.txt");

    if(plainFile.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        cout << "File opened successfull" << endl;
        plainFile.close();
    }
    else{
        cout << "could not open file." << endl;
    }
    return a.exec();
}

编译和运行时的输出是“无法打开文件”。 我哪里做错了?

工作目录中有plain.txt文件吗? - Bart
2个回答

2

可能是因为plain.txt在当前工作目录或PATH中不存在。请确保文件在工作目录中或将绝对路径传递给QFile

另请参阅QFile::exists返回的内容。


plain.txt存在于相同的工作目录中,但是正如您建议的那样,将绝对路径传递给QFile确实起作用!谢谢。 - Amani
3
该文件在当前工作目录中_不存在_。如果想要找出实际的工作目录是什么,可以尝试运行以下代码:qDebug() << QFileInfo("plain.txt").absoluteFilePath(); - user362638
你也可以从QtCreator或Visual Studio的项目选项中找到(启动)路径。 - huysentruitw
QDir::currentPath/current 函数返回当前工作目录。详见:http://qt-project.org/doc/qt-5.1/qtcore/qdir.html#currentPath - Frank Osterfeld
遇到了同样的问题。打印实际工作目录显示,它不是源代码正在编译的文件,而是相邻的调试文件。它是如何决定的,我该如何更改它? - Dean P

0

Wouter Huysentruit是正确的。

请记住,默认情况下,当您从QtCreator运行应用程序时,工作目录为例如:C:\Projects\build-Test-Desktop_Qt_5_1_0_MinGW_32bit-Debug。但是,您的.exe文件位于C:\Projects\build-Test-Desktop_Qt_5_1_0_MinGW_32bit-Debug\Debug中。

当您直接运行.exe文件时,那么工作目录将是此文件现在所在的文件夹。

因此,您可以:

1.传递绝对路径。

2.将文件放置在当前工作目录中(我认为这是最好的解决方案)。

3.只需更改相对路径:QFile plainFile("debug/plain.txt");


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接