QFile不会打开文件

时间:2013-09-19 11:44:13

标签: c++ qt qtcore

QLabel* codeLabel = new Qlabel;

QFile file("C:\index.txt");
file.open(stderr, QIODevice::WriteOnly);
QByteArray data;
data = file.readAll();

codeLabel->setText("test"+QString(data));
file.close();

然后在QLabel中只有“测试”。 帮助,请

4 个答案:

答案 0 :(得分:3)

除了你应该在C风格的字符串(c:\\index.txt)中转义反斜杠这一事实,你有以下顺序的问题:

//                           vvvvvvvvv
file.open(stderr, QIODevice::WriteOnly);
:
data = file.readAll();
//          ^^^^

当您以只写方式打开文件然后尝试阅读时,您认为究竟会发生什么?您需要将其打开以便阅读,例如使用QIODevice::ReadOnlyQIODevice::ReadWrite

最重要的是,您应该通过提供返回代码来检查所有失败函数的返回代码。您目前不知道file.open()是否有效。

我也不相信你应该打开stderr(这是一个真正的输出“设备”)来输入。您几乎肯定不会在该文件描述符上获得 中的任何实际数据,这可能是您输入为空的原因。

你需要退后一步,询问你想要实现的。例如,您是否尝试捕获进程发送到标准错误的所有内容?如果是这样,那就不会那样了。

如果您只是尝试阅读index.txt文件,则表示您使用了错误的重载。完全删除stderr参数:

file.open (QIODevice::ReadOnly);

如果您正在尝试做 else ,请将其添加到问题中。

答案 1 :(得分:2)

file.open(stderr, QIODevice::WriteOnly);

这会再次关闭文件,并以只写模式重新打开stderr流

您需要将其更改为

file.open(QIODevice::ReadOnly);

答案 2 :(得分:2)

QFile file("C:\index.txt");

在这里,您尝试打开一个名为C:index.txt的文件,因为'\i'已转换为i。你想加倍反斜杠:

QFile file("C:\\index.txt");

答案 3 :(得分:0)

因为您从只写的文件中读取