0

フォルダーへのパスを指定し、そのフォルダー内のすべての xslt ファイルを次々と開きたい。

私はこのようにそれをやろうとしました:

 QString path = "/misc/example";
 QDir dir(path);
 QStringList filters;
 filters << "*.xslt";

 foreach (QFile file, dir.entryList(filters, QDir::Files))
 {
      if( !inFile.open( QIODevice::ReadOnly | QIODevice::Text ) )
      {
        qDebug("Failed to open file for reading.");
        return 0;
      }
 }

しかし、私はこのエラーが発生します

/usr/include/qt4/QtCore/qfile.h:209: Fehler:'QFile::QFile(const QFile&)' is private

私は何を間違っていますか?

4

2 に答える 2

2

エラーについて、この行

 foreach (QFile file, dir.entryList(filters, QDir::Files))

copy-constructor が private である間に todir.entryListとしてオブジェクトをコピーしようとします。次に、エラーが表示されます。QFilefile

次のようなことを試してください:

foreach (QString &name, dir.entryList(filters, QDir::Files))
{
    QFile file(name);
    if (!file.open (QIODevice::ReadOnly | QIODevice::Text))
    {
      // ...
    }
}
于 2013-03-20T12:32:06.693 に答える
2

entryListを返しますQStringListが、の一部のコンテナではありませんQFiles。だからこう振る舞えばいい

...
foreach ( QString fileName, dir.entryList(filters, QDir::Files) )
{
    QFile inFile( fileName );
    if( !inFile.open( QIODevice::ReadOnly | QIODevice::Text ) )
    {
        qDebug("Failed to open file for reading.");
        return 0;
    }
}

foreachファイル名のリストを作成する際の大きなオーバーヘッドを避けるために、 QDirIteratorを使用することをお勧めします。

QDirIterator dirIt( path, filters, QDirIterator::Subdirectories );
while ( it.hasNext() )
{
    QFile inFile( it.next() );
    if( !inFile.open( QIODevice::ReadOnly | QIODevice::Text ) )
    {
        qDebug("Failed to open file for reading.");
        return 0;
    }
}
于 2013-03-20T12:32:37.653 に答える