lister contenu dossier linux avec Qt

lister contenu dossier linux avec Qt - C++ - Programmation

Marsh Posté le 06-06-2009 à 17:19:24    

Bonjour,
 
je suis actuellement sous Linux avec Qt 4.5 et j'aimerai que depuis mon programme je puisse obtenir une liste d'un dossier.
Que ensuite cette liste soit sous forme d'un tableau de chaine de caractère, pour que, par la suite, je puisse comparer chaque chaines de caractère de ce tableau à une autre chaine et qu'il ne me conserve dans un autre tableau seulement les chaines qui correspondent partiellement à la chaine avec laquelle j'ai fait la comparaison.
 
Avez-vous des idées de fonctions utilisables sous linux? Savez-vous si Qt propose des fonctions de ce types?
 
Merci à vous!


Message édité par rihaod le 06-06-2009 à 17:19:45
Reply

Marsh Posté le 06-06-2009 à 17:19:24   

Reply

Marsh Posté le 06-06-2009 à 17:25:58    

Reply

Marsh Posté le 06-06-2009 à 17:28:04    

j'ai oublié de préciser que je suis C++, merci pour votre réponse.

Reply

Marsh Posté le 06-06-2009 à 19:11:02    

et donc ? genre je t'ai passer des liens en JAVA :E

Reply

Marsh Posté le 07-06-2009 à 15:48:45    

C'est de l' XML non? avez-vous une fonction simple me permettant de lister un répertoire sous Linux?

Reply

Marsh Posté le 07-06-2009 à 16:20:29    

Reply

Marsh Posté le 07-06-2009 à 16:34:25    

QDir et sa fonction entryList: http://pepper.troll.no/s60prerelea [...] #entryList

Code :
  1. QDir dir("chemin du répertoire" );
  2. QStringList list(dir.entryList());


 
Ou même encore mieux:

Code :
  1. QStringList list(QDir("chemin du répertoire" ).entryList());


 
Ca claque Qt quand même :o
 
Pourquoi ya un espace après ma chaîne "chemin du répertoire"?


Message édité par ngkreator le 07-06-2009 à 16:40:39
Reply

Marsh Posté le 07-06-2009 à 17:39:27    

à quoi correspond entryList() svp?

Reply

Marsh Posté le 07-06-2009 à 18:12:07    

Comment ça?

Reply

Marsh Posté le 10-06-2009 à 15:32:08    

merci pour vos réponse si rapide, je m'excuse pour les miennes si lentes!  
Donc, QDir correspond tout simplement au chemin et la fonction entryList correspond au paramètres "d'affichage", c'est bien ça?
list peut alors être réutilisé pour être affiché par exemple dans un List widget?  
 
merci à vous.

Reply

Marsh Posté le 10-06-2009 à 15:32:08   

Reply

Marsh Posté le 10-06-2009 à 16:04:15    

"entryList" est une méthode membre de la classe QDir, elle renvoie la liste des noms de fichiers contenus dans le répertoire qui est donnée en chemin. Oui QDir correspond au chemin, mais il contient plein d'autres informations sur le répertoire qui est donné en chemin.
La variable "list" contient un objet QStringList (QList<QString> ). C'est une liste d'objets QString. Chaque objet QString contient le nom d'un fichier.

 

Libre à toi d'utiliser cette liste comme tu le veux.

 

Après oui il se trouve que tu peux l'utiliser pour créer une nouvelle ligne dans un QListWidget avec la fonction addItems à qui tu donnes un objet QStringList. Chaque colonne de la nouvelle ligne prendra une chaine qui est contenu dans la liste.


Message édité par ngkreator le 10-06-2009 à 16:08:15
Reply

Marsh Posté le 10-06-2009 à 18:38:52    

Il faudrait enfaite que dans la variable "list" apparaissent la liste des fichiers après filtrage en fonction d'une autre chaine. Qu'il ne me garde que les noms des fichiers commençant par une chaine que j'aurai spécifié avant, un genre de strcmp(). Comment puis-je spécifier ce type de filtre?
et comment puis-je manipuler ensuite les différentes chaînes contenues dans le QStringList?
 
ps: je suis nouveau sur Qt et pendant mes tests j'avais besoin d'une fonction de base pour l'affichage en console comme printf(), mais l'include <stdio.h> ne marche pas, Quelle est la fonction d'affichage de texte simple sous Qt?
 
merci à vous.

Reply

Marsh Posté le 10-06-2009 à 20:37:20    

Avant tout je te conseilles de lire la doc de QDir, pas toute la page bien sûr. Mais quand tu te demandes:

rihaod a écrit :

Il faudrait enfaite que dans la variable "list" apparaissent la liste des fichiers après filtrage en fonction d'une autre chaine. Qu'il ne me garde que les noms des fichiers commençant par une chaine que j'aurai spécifié avant, un genre de strcmp(). Comment puis-je spécifier ce type de filtre?


Il te suffi de regarder la doc de QDir pour voir s'il existe une fonction qui permet de filtrer, en cherchant le mot "filter" par exemple, pourquoi pas? Et là on tombe sur plusieurs fonctions dont celle là: http://doc.qtsoftware.com/4.5/qdir.html#setNameFilters

 

Tu as un objet QDir. Une fois que tu auras appliqué les bons filtres à cet objet grâce à sa fonction setNameFilters, son autre fonction entryList te renverra uniquement les noms de fichiers qui correspondent à ce filtre.

 

Donc d'après l'exemple de la doc si "prefix" est un objet QString qui contient la chaine que tu auras spécifié:

Code :
  1. QDir dir("Chemin_vers_dossier" );
  2. QStringList filters(prefix+"*" );
  3. dir.setNameFilters(filters);
  4. QStringList list(dir.entryList());


Alors tu devrais normalement récupérer tous les fichiers et dossiers qui commencent par le contenu de "prefix". J'ai peut être fait des conneries je suis distrait  :whistle:

 
rihaod a écrit :

et comment puis-je manipuler ensuite les différentes chaînes contenues dans le QStringList?


QStringList est un typedef de QList<QString>. Donc il faut que tu regardes dans la doc de Qt les méthodes qui te permettent d'accéder aux différents éléments (ici des objets QString) que contient un objet de classe QList. Pour infos il existe plusieurs méthodes pour accéder aux éléments: itérateurs type Java, itérateurs types std, indices. Le plus pratique reste les itérateurs type Java, enfin c'est un avis perso.
Doc de QList: http://doc.qtsoftware.com/4.5/qlist.html
Accéder aux éléments avec un indice: http://doc.qtsoftware.com/4.5/qlist.html#at ou http://doc.qtsoftware.com/4.5/qlis [...] or-5b-5d-2
Le plus simple pour un débutant c'est l'exemple donné par la doc:

Code :
  1. for (int i = 0; i < list.size(); ++i) {
  2.     if (list.at(i) == "Jane" )
  3.         cout << "Found Jane at position " << i << endl;
  4. }
 
rihaod a écrit :

ps: je suis nouveau sur Qt et pendant mes tests j'avais besoin d'une fonction de base pour l'affichage en console comme printf(), mais l'include <stdio.h> ne marche pas, Quelle est la fonction d'affichage de texte simple sous Qt?

 

merci à vous.

Printf fonctionne uniquement en mode console. Là tu es en mode "interface graphique" tu ne pourras pas afficher d'infos avec printf, enfin moi je ne sais pas comment faire en tous cas. Pour ça tu as QDebug, que je n'ai jamais utilisé. Je ne pourrai pas t'aider plus, mais la doc est là pour ça ;)

 

La doc est indispensable! http://doc.qtsoftware.com/4.5/index.html

 

La faq Qt de developpez.com peu t'aider aussi: http://qt.developpez.com/faq/ Il ont un bon forum pour Qt, ici pas grand monde utilise cette bibliothèque, tu auras plus d'aide là bas.


Message édité par ngkreator le 10-06-2009 à 20:46:42
Reply

Marsh Posté le 10-06-2009 à 23:48:31    

Au fait si tu veux récupérer seulement les noms des fichiers présents dans le répertoire (donc pas les dossiers, et pas les fichiers "." et ".." ), il faut rajouter les constantes QDir::Files et QDir::NoDotAndDotDot dans la fonction entryList:
 

Code :
  1. QDir dir("Chemin_vers_dossier" );
  2. QStringList filters(prefix+"*" );
  3. dir.setNameFilters(filters);
  4. QStringList list(dir.entryList(QDir::Files|QDir::NoDotAndDotDot));


On utilise un ou soit une barre "|" entre les 2 constantes.
 
Tout ça est expliqué dans la doc de entryList.

Reply

Marsh Posté le 11-06-2009 à 14:08:27    

merci, ça fonctionne!

Reply

Marsh Posté le 11-06-2009 à 16:06:13    

Maintenant que je peut lister, mon problème est la réutilisation des QListWidgetItem que j'aimerais concaténer avec une autre chaine. Donc à l'aide de la fonction qstrcpy(), mais le problème est le type de l'item...
 
Comment puis-je convertir le type?
 
merci à vous.


Message édité par rihaod le 11-06-2009 à 16:06:29
Reply

Marsh Posté le 11-06-2009 à 18:14:03    

C'est bon, j'ai réglé le problème!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed