我想读取文件夹中的所有文件,通过 entryList()
将它们存储在 fileList
中,然后对于该文件夹中的每个文件,打开并将其内容读入到 QString
中。我认为这应该很容易,但我无法弄清楚我做错了什么。现在我得到的错误是:
no matching function for call to 'QTextStream::QTextStream(QFile*, QIODevice::OpenModeFlag)'
我知道这与我声明 QTextStream
的方式有关,但问题在于我找到的示例似乎都这样做,那么我为什么不能呢?
此外,我注意到如果我添加测试以检查文件打开是否成功,我会收到“拒绝访问”的警告,即使我只是在读取。虽然我可以读取文件夹的内容,并使用这些文件填充 QListWidget
没有任何问题。
这些是 *.JSON 文件不应该有影响,对吗?
我已经看过这里、这里 和 这里 的示例,但无法弄清楚我做错了什么。感谢任何帮助。
这是我的代码:
foreach(QString fileName, fileList){
QFile file(fileName);
file.open(QIODevice::ReadOnly);
QString s;
QTextStream s1(&file, QIODevice::ReadOnly);
s.append(s1.readAll());
qDebug() << "string content:" << s; // empty!!!
}
更新
根据cmannett85的建议进行修改后,我不再遇到错误,但出于某些原因,最终字符串s
仍为空。
关于文件夹中的读/写权限,我现在注意到如果我测试
if(!file.open(QIODevice::ReadWrite))
{
QMessageBox::information(0,"error",file.errorString());
}
当我运行循环时,出现了两个警告 - 我怀疑是由 .
和 ..
引起的。以前会产生32个警告,但是文件夹里只有30个文件。
无论如何,我试图读取的文件是 *.JSON 文件,并且根据 Windows 7 中的属性对话框,它们既不是只读也不是隐藏。我可以在相同的文件夹中使用相同的程序编写文件。
有一件事让我想知道是否可能是原因:文件名在扩展名之前包含.
,即ID.file.16.json
。
更新2
这与文件名中有.
无关。测试了不同的文件,结果是一样的。
此外,这两个警告确实与.
和..
有关。使用QDir::Filters
解决了这个问题。然而,有趣的是,如果应用QDir::Files
过滤器,一切都很好;但是如果使用QDir::NoDotAndDotDot
过滤器,则根本无法检测到任何文件,这与Qt助手的说明相反,后者说只有这两个元素在使用此过滤器时被忽略。
更新3
遵循ddriver的建议,但仍然无法工作。包括检索文件夹中的文件在内的当前代码如下:
QDir assetsFolder = QDir("C:/Users/THB7OI/Desktop/app/qt-book/chap08/items");
QStringList files = assetsFolder.entryList(QDir::Files);
// for each file in the folder,
foreach (QString file, files) {
QFile f(file);
if (!f.open(QFile::ReadOnly | QFile::Text)) break;
QTextStream in(&f);
qDebug() << f.size() << in.readAll();
f.close();
}
#include <QTextStream>
吗? - Andreas Festerfile.size()
返回0... 你有什么想法吗? - Joum