フォルダー内のすべてのファイルを読み取り、fileList
経由で保存してからentryList()
、そのフォルダー内の各ファイルを開いて、その内容をQString
. これは簡単だと思いますが、何が間違っているのかわかりません。私が今得ているエラーは次のように言っています:
no matching function for call to 'QTextStream::QTextStream(QFile*, QIODevice::OpenModeFlag)'
これは、私が宣言している間違った方法に関連していることを理解していますが、問題QTextStream
は、私が見つけた例がこれを行うように見えるということです。
また、ファイルのオープンが成功したかどうかを確認するテストを追加すると、読んだだけでも「アクセスが拒否されました」という警告が表示されることに気付きました。ただし、フォルダーの内容を読み取って、QListWidget
それらのファイルを問題なく入力することもできます。
これらが *.JSON ファイルであるという事実は問題ではありませんよね?
this、this、およびthisの例を見てきましたが、何が間違っているのかわかりません。どんな助けでも大歓迎です。
これは私のコードです:
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());
}
ループを実行する.
と、2 つの警告が表示されます。..
32 個の警告が生成される前に、フォルダー内に 30 個のファイルがあります。とにかく、私が読み込もうとしているファイルは *.JSON であり、Windows 7 のプロパティ ダイアログによると、読み取り専用またはhiddenとして設定されていません。同じプログラムでまったく同じフォルダーにファイルを書き込むことができます。
これの理由ではないかと思うことが 1 つあります。それは、ファイル名.
の拡張子の前にID.file.16.json
.
UPDATE 2.
異なるファイルでテスト
したファイル名とは関係なく、結果は同じです。
また、2 つの警告は実際には.
とに関連していました..
。QDir::Filters
問題を解決しました。QDir::Files
不思議なことに、フィルターを適用すると、すべて問題ありません。しかし、QDir::NoDotAndDotDot
フィルターを使用すると、このフィルターを使用するとこれら2つの要素のみが無視されるという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();
}