Bonjour à tous,

Depuis deux jours je bataille pour trouver ce qui cloche mais je ne vois pas alors si quelqu'un peut m'apporter sa lumière...

Explication en bref et problème:

La fonction ci-dessous à pour but de rechercher une partie d'un texte donner par l'utilisateur(à l'aide de QLineEdit) dans tout les fichiers .txt du répertoire. Autrement dit la fonction "recherche" tout les fichiers .txt du répertoire(le répertoire et lui aussi donné par l'utilisateur à l'aide de QLineEdit), les mémorise (avec QStringList), et recherche si le texte est présent ou non dans ces fichiers.

J'ai effectué énormément de tests(et je crois que le mot est faible, j'ai le même problème sur beaucoup d'autres fonctions similaires) .La fonction semble fonctionner correctement dans le répertoire ou se situe le .exe de mon programme mais pas quand je change de répertoire (elle lit bien les fichiers du répertoire que je lui donne mais elle ne lit pas ce que je lui demande de rechercher dans le nouveau fichier).

Par exemple:

Si j'ai mon .exe dans le répertoire c:\monProgramme\
un fichier texte.txt avec "abcd" dedans, je recherche "abcd" elle me trouve bien le fichier .txt et me trouve aussi "abcd".

Même configuration mais dans un autre répertoire, elle me trouve bien le fichier text.txt mais pas "abcd".

Les grandes lignes de ma fonction:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 
 
void fenetrePrincipal::RechercherWord()
{
     int ligne=0;
     int nbrDoccurence=0;
 
     if (TxtARechercher->text().isEmpty()) //recupère "TxtARechercher" depuis un QLineEdit
     {
        return; // Arrêt de la méthode
     }
     if (Patch->text().isEmpty())
     {
        return; // Arrêt de la méthode
     }
 
     QString PatchString;
     PatchString = Patch->text();  //récupère le chemin du répertoire désiré 
     QDir dir(PatchString);    
 
     QStringList filters; //filtre
     filters << "*.txt";
     dir.setNameFilters(filters);
 
     QStringList fichiers = dir.entryList(filters, QDir::Files);  //récupère les fichiers .txt
 
     QString RechercheString;
     RechercheString = TxtARechercher->text();  //Récupère "TxtARechercher" depuis un QLineEdit
 
     QString codeOut;
     QString codeOutFinal;
 
    for(int i=0; i < fichiers.size() ;i++) //boucle des elements 
    {
         nbrDoccurence=0;
         QFile file(fichiers.at(i));   
         if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
         {
             return;
         }
 
         QTextStream in(&file);
 
         while(!in.atEnd())
         {
             QString line = in.readLine();         //lit une ligne du fichier
             nbrDoccurence = line.count(RechercheString);  //compte le nombre de fois ou on trouve "RechercheString"  (c a d le mot à rechercher)
             ligne++; 
             if(nbrDoccurence>0)
             codeOut += QString::number(ligne) + " ";//QString::number convertie le int to string
         }
         file.close();
    }
    codeRechercher->setPlainText(codeOutFinal); //affiche résultat dans un QTextEdit de mon programme.
}
J'ai simplifié le code pour afficher que les grandes lignes.
Voili voilu