我正在尝试读取文件夹中的所有文件,将它们存储在fileList
via中entryList()
,然后对于该文件夹中的每个文件,打开它并将其内容读入QString
. 我认为这应该很容易,但我无法弄清楚我做错了什么。我现在得到的错误说:
no matching function for call to 'QTextStream::QTextStream(QFile*, QIODevice::OpenModeFlag)'
我知道这与我声明的错误QTextStream
方式有关,但问题是我发现的示例似乎可以做到这一点,那么,为什么我不能呢?
另外,我注意到,如果我添加测试以检查文件打开是否成功,我会收到一条警告说“访问被拒绝”,即使我只是在阅读。虽然,我可以读取文件夹的内容,甚至可以QListWidget
毫无问题地用这些文件填充 a。
这些是 *.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());
}
当我运行循环时,我收到两个警告 - 我怀疑是由.
and引起的。..
在它产生 32 个警告之前,我在文件夹中有 30 个文件。无论如何,我要读取的文件是 *.JSON 并且根据 Windows 7 中的属性对话框,它们没有设置为read-only或hidden。我可以使用相同的程序将文件写入完全相同的文件夹中。
我想知道一件事是否可能是造成这种情况的原因:文件名包含.
在扩展名之前,即ID.file.16.json
.
更新 2
它与使用不同文件测试过的文件名无关,.
结果是相同的。
此外,这两个警告确实与.
and相关..
。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();
}