Lecture de la totalité du fichier à QString

Je suis en train de lire tous les fichiers dans un dossier, de les stocker dans fileList via entryList() puis, pour chaque fichier dans ce dossier, ouvrir et lire son contenu dans un QString. Je pense que ce devrait être facile, mais je ne peux pas comprendre ce que je fais mal. L'erreur que je reçois maintenant dit:

no matching function for call to 'QTextStream::QTextStream(QFile*, QIODevice::OpenModeFlag)'

Je comprends que cela se rapporte à la mal je vais déclarer la QTextStream, mais le truc, c'est que les exemples que j'ai trouvé semble NE ce, alors, pourquoi ne puis-je pas?

Aussi, j'ai remarqué que si j'ajoute le test pour vérifier si le fichier est ouvert a été un succès, je reçois un avertissement en disant: "accès refusé", même si je suis juste en train de lire. Bien, je peux lire le contenu du dossier et même remplir un QListWidget avec ces fichiers sans problème.

Le fait que ce sont des *.Des fichiers JSON ne devrait pas d'importance, non?

J'ai vu cette, cette et cette exemples, mais ne peut pas comprendre ce que je fais mal. Toute aide est appréciée.

C'est mon code:

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!!!

}

Mise à JOUR
Avec la modification suggérée par cmannett85, je n'ai plus l'erreur, mais pour une raison quelconque, la chaîne s est encore vide à la fin.
Concernant les autorisations de lecture/écriture dans le dossier, j'ai remarqué que si je test

if(!file.open(QIODevice::ReadWrite))
        {
            QMessageBox::information(0,"error",file.errorString());
        }

- Je obtenir deux avertissements - je suis soupçonner provoqué par . et .. - quand je lance la boucle. Avant qu'il produit 32 mises en garde et j'ai 30 les fichiers dans le dossier.
De toute façon, les fichiers que je suis en train de lire sont *.JSON et en fonction de la boîte de dialogue propriétés dans Windows 7, ils ne sont pas définies comme en lecture seule ou caché. Je peux écrire des fichiers dans le même dossier avec le même programme.

Il y a une chose que je me demande si cela pourrait être la raison pour cela: le nom de fichier contient . avant l'extension, c'est à dire, ID.file.16.json.

Mise à JOUR 2
Il n'est pas lié au nom de fichier ayant . Testé avec des fichiers différents et le résultat est le même.

Aussi,les deux mises en garde étaient en effet liés à la . et ... QDir::Filters résolu le problème. Curieusement, cependant, dois-je appliquer le QDir::Files filtre, tout est ok; mais si j'utilise le QDir::NoDotAndDotDot de filtre, pas de fichiers sont détectés que ce soit, contrairement à l'intervalle Qt Assistant explication qui dit que seulement ces deux éléments sont ignorés à l'aide de ce filtre.

Mise à JOUR 3

Suivi ddriver de la suggestion, mais ne fonctionne toujours pas. Code actuel, y compris la recherche et l'extraction de fichiers dans le dossier est le suivant:

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();

    }
  • Avez-vous #include <QTextStream>?
  • yup...
  • "accès refusé" sur un Open() n'est pas un avertissement, c'est une erreur. Dossier lire les autorisations sont différentes à partir d'un fichier d'autorisations de lecture. Si votre ouverture est vraiment défaut alors qu'allez vous arrêter là. E / s de fichier n'est pas un lieu d'ignorer les valeurs de retour.
  • mais j'ai utilisé un autre programme que j'ai créé pour écrire les fichiers je vais maintenant essayer de lire dans le même dossier, est-il encore possible?
  • Possible, oui. Normal, pas de. Quel OS & emplacement du dossier? Il y a quelques alambiqué autorisations de dossier qui pourrait vous permettre de créer et d'écrire mais pas lire. Sur certains partages réseau, par exemple.
  • C'est un dossier local dans le bureau. Windows 7.
  • stackoverflow.com/questions/15824043/...
  • merci, mais je pense que le problème est ailleurs. La chaîne vient vides à la fin, et file.size() retourne 0... des idées?
  • voir ma réponse pour plus d'info.

InformationsquelleAutor Joum | 2013-06-17