【问题标题】:Can not read text file with Qt 5无法使用 Qt 5 读取文本文件
【发布时间】:2013-08-10 15:19:56
【问题描述】:

我编写了一个简单的代码来使用 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吗?

标签: c++ qt


【解决方案1】:

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

还可以查看QFile::exists 返回的内容。

【讨论】:

  • plain.txt 存在于同一工作目录中,但正如您所建议的,将绝对路径传递给 QFile 确实有效!谢谢。
  • 所以文件存在于工作目录中。如果你想知道工作目录到底是什么,试试这个:qDebug() &lt;&lt; QFileInfo("plain.txt").absoluteFilePath();
  • 你也可以从QtCreator或Visual Studio中的项目选项中找出(启动)路径
  • QDir::currentPath/current 也返回当前工作目录qt-project.org/doc/qt-5.1/qtcore/qdir.html#currentPath
  • 遇到了同样的问题。打印实际工作目录表明它不是正在编译源代码的文件,而是其相邻的调试文件。它到底是如何决定的,我该如何改变它?
【解决方案2】:

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");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 2011-07-23
    相关资源
    最近更新 更多