QFile无法打开文件

3

我有一个程序,基本上是从Qt网站上抄来的,想试着打开一个文件。但这个程序无论怎么样都不会打开文件,让我很困惑。我已经查阅了大量文档,但仍然找不到原因。请问你能解释一下为什么它不能工作吗?

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFile>
#include <QTextStream>
#include <QString>
MainWindow::MainWindow(QWidget *parent) :
    QWidget(parent)
{
    QFile file("C:/n.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
             return;
    QTextStream in(&file);
    QString f=in.readLine();
    lab =new QLabel("error",this);
    lab->setGeometry(100,100,100,100);
    lab->setText(f);

}

3
QFile::error() 方法返回什么? - Dimitry Ernot
1
如何使用QFile::error()函数? - user1647753
1
使用它非常容易。最简单的方法是将QFile::error()的返回值存储到一个变量中,然后在调试器中运行代码并查看该返回值。然后从Qt文档中找到该错误代码的含义。 - user362638
1
你确定文件 C:\n.txt 真的存在吗?你确定它不是 C:\n.txt.txt 这样的文件吗? - user362638
1
非常感谢,我因此一直有很多焦虑发作,现在终于松了口气,原来是 n.txt.txt,我真的太蠢了,谢谢你。 - user1647753
显示剩余3条评论
2个回答

7
打开文件之前,您可以始终检查其是否存在:
QFile file("myfile.txt");
if (!file.exists()) {
    // react
}

如果文件存在但无法打开,您可以获取错误状态和信息:
QString errMsg;
QFileDevice::FileError err = QFileDevice::NoError;
if (!file.open(QIODevice::ReadOnly)) {
    errMsg = file.errorString();
    err = file.error();
}

并且,始终记得:如果文件已经被打开,则要记得关闭它。在您的示例中,您没有这样做:

file.close();

11
当文件的析构函数被调用时,文件会自动关闭。 - user362638

0

文件错误 QFile :: error () const 返回文件错误状态。 I/O 设备状态返回错误代码。例如,如果 open()返回 false,或读写操作返回 -1,则可以调用此函数以查找操作失败的原因。 请参见 unsetError()。

发布错误代码。在 Windows 中,它不应该是 QFile file(“C:\ n.txt”); \ 而不是 /?


1
那么应该是 QFile file("C:\\n.txt");,因为反斜杠需要转义。但在Windows中,/也可以正常工作,所以没有必要更改它。 - user362638
实际上,如果支持的话,在应用程序中使用“/”作为字符串中的路径分隔符肯定是首选。没有理由使移植变得更加困难,也没有理由在字符串内部使用需要转义的字符(有可能会忘记,并且运气不好的话就会默默地得到一个错误的字符)。 - hyde
不知道提问者是否找到了答案,但大多数情况下,这是由于权限问题引起的。如果您正在调试程序,请尝试以管理员模式打开QtCreator,然后进行调试。在运行程序时,在管理员模式下打开cmd.exe窗口并运行可执行文件。此外,QFile可以双向工作:即QFile(“C:/n.txt”)和QFile(“C:\n.txt”)在Windows上都可以使用,尽管在文件路径中使用正斜杠是更可取的方式。 - Manmohan Singh

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