Pb avec XP SP2

cs_obby Messages postés 91 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 12 octobre 2006 - 19 août 2005 à 17:40
cs_obby Messages postés 91 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 12 octobre 2006 - 19 août 2005 à 21:43
Salut,





J’ai développé un soft qui affiche dans des combobox un nom
lorsqu’il trouve deux fichiers avec un nom quasi-identique, la différence étant
que la fin de fichier se termine par $f et $d. Lorsqu’il voit que les deux
fichiers sont présents, il ajoute à la combobox.

Cela marche très bien sur un
XP SP1 (mon PC ou j’ai développé le soft) mais une fois le soft installé sur
une autre machine ayant un XP SP2, cela ne fonctionne plus aussi bien, il n’affiche
pas toute les références existant dans certains répertoires.



Quelqu'un saurait-il d'ou cela vient?



Merci

12 réponses

vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 3
19 août 2005 à 17:46
il faut recompiler ton programme a mon avis, le code source est
potable mais pas le binaire, peut etre que certaine fonction Windows
ont ete deplacée ??

Il serais judicieux de poster ton code, du moins les parties qui semblerai ne pas marché,



voila, @+, vinc1008881
0
cs_obby Messages postés 91 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 12 octobre 2006
19 août 2005 à 17:50
voila le code :

//Vide le combobox pour mise à jour

if(m_ComboModele.GetCount () != 0)

{

for(int i=0;i<m_ComboModele.GetCount ();++i)

m_ComboModele.ResetContent ();

}

//On récupère le repertoire choisi dans la première combobox

int nIndex = m_ComboMarque.GetCurSel ();

m_ComboMarque.GetLBText (nIndex,m_SMarque);

CString path;

path = m_StrPath+"telephone_lk\"+m_SMarque;





CString szExtension
= "*f.gif"; //
image de face

CString szExtension2 = "*d.gif"; // image de dos



//On concatène le caractère '\'

path += "\";

//Puis l'extension

CString strpath = path + szExtension;

CString strpath2 = path + szExtension2;



// Va contenir les informations de la recherche

WIN32_FIND_DATA File, File2;

HANDLE liste, liste2;



//On cherche les deux premiers Fichiers

liste = FindFirstFile(strpath, &File);

liste2 = FindFirstFile(strpath2, &File2);



//On recupere les noms de fichiers

CString str;

CString str2;

str.Format((CString)File.cFileName);

str2.Format((CString)File2.cFileName );



//On enlève l'extension

CString tmp1 = str.SpanExcluding (".");

CString tmp2 = str2.SpanExcluding (".");



//On cherche la position a partir de laquelle les deux fichiers ont un nom différent

int index = tmp1.ReverseFind ('$'); //*****$f.gif

int index2 = tmp2.ReverseFind ('$'); //*****$f.gif



//on recupère les noms qui doivent être les meme

CString stra1 = str.Left (index);

CString stra2 = str.Left (index2);





//vérification que les deux fichiers correspondent au meme nom

if(stra1 == stra2)

{

//On ajoute le fichier, à la liste

m_ComboModele.AddString (stra1);



}



//Tant qu'il existe un fichier suivant

while((FindNextFile(liste, &File))&&(FindNextFile(liste2, &File2)))

{

//Si ce fichier est un répertoire

if(File.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

{

}

else //Sinon

{

str.Format((CString)File.cFileName);

str2.Format((CString)File2.cFileName );



//mise en forme de la chaine de charactère

tmp1 = str.SpanExcluding (".");

tmp2 = str2.SpanExcluding (".");



index = tmp1.ReverseFind ('$');

index2 = tmp2.ReverseFind ('$');



stra1 = str.Left (index);//str.SpanExcluding ("f");

stra2 = str.Left (index2);//str2.SpanExcluding ("d");



if( stra1 == stra2)

{

//On ajoute le fichier, à la liste

if (stra1 != ' ')

{

m_ComboModele.AddString (stra1);

}

}

}

}

//On arette la recherche.

FindClose(liste);



//par défaut, on affiche le premier fichier dans la combobox

m_ComboModele.SetCurSel(0);
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 août 2005 à 18:00
Les APIs de gestion fichiers, comme la plupart des autre, n'ont pas bougé d'un iota sinon plus rien ne fonctionnerait.

C'est quoi tout ce mic mac de recopie des cFileName dans des CString (avec les alloc mémoire que ça implique), les reverse, etc... Apprends à manier les pointeurs. Doit être aussi 'rapide' que du VB ton truc.

ciao...
BruNews, MVP VC++
0
cs_obby Messages postés 91 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 12 octobre 2006
19 août 2005 à 18:05
Ba dsl mais les CString c plus facile à manipuler, bon nombre de
fonctions sont déjà programmé, j'ai pas envie de tout me retaper. Mais
bon, le pb il est pas la, du moins je crois pas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 août 2005 à 18:32
et le vb c'est encore plus facile mais la paie n'est pas la même, allons ce n'est pas une façon de penser dans la prog.

char *c, *d;
DWORD len;

c = f1.cFileName;
while(*c) { // RECHERCHE DU $
if(*c == '$') goto found1;
c++;
}
// ici pas trouvé on passe aux fichiers suivants

found1:
len = c - f1.cFileName;
idem avec d sur f2.cFileName

if(len != (d - f2.cFileName)) PAS BON

Ensuite un memcmp sur len suffit.

ciao...
BruNews, MVP VC++
0
cs_obby Messages postés 91 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 12 octobre 2006
19 août 2005 à 18:50
euh oui t'a pas moyen d'être un peu plus explicite, je comprend pas tout. le "idem avec d sur f2.cFileName" tu entend koi par la?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 août 2005 à 19:11
en fait c suffira, pas besoin de d:
c = f2.cFileName;
while(*c) { // RECHERCHE DU $
if(*c == '$') goto found2;
c++;
}
ici pas de '$', passer aux fichiers suivant


found2:
if(len != (c - f2.cFileName)) PAS BON, fichiers suivants


if(!memicmp(f1.cFileName, f2.cFileName, len)) FICHIERS T'INTERESSENT


et y a pas une alloc ni desalloc ni retournement ni rien d'inutile et donc nuisible.

ciao...
BruNews, MVP VC++
0
cs_obby Messages postés 91 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 12 octobre 2006
19 août 2005 à 19:22
Dans le déroulement de la fonction, les found1 et found2: je peu les
mettre ou je veu ou c séquentiel? J'ai du mal à voir comment organiser
tout ca.
0
cs_obby Messages postés 91 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 12 octobre 2006
19 août 2005 à 19:25
en fait c'est qu'il faut placer dans des boucles :

//Tant qu'il existe un fichier suivant

while((FindNextFile(liste, &File))&&(FindNextFile(liste2, &File2)))

{

........

}
0
cs_obby Messages postés 91 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 12 octobre 2006
19 août 2005 à 21:10
ok ca marche :

char *c, *d;

DWORD len;



c = File.cFileName;



while(*c)

{

// RECHERCHE DU $

if(*c == '$') break;

c++;

}



len = c - File.cFileName;



//idem avec d sur f2.cFileName

c= File2.cFileName ;

while(*c)

{

// RECHERCHE DU $

if(*c == '$') break;

c++;

}

if(len != (c - File2.cFileName))// PAS BON, fichiers suivants

{

}

else

{

if(!memicmp(File.cFileName, File2.cFileName, len)) //FICHIERS T'INTERESSENT

{

m_ComboModele.AddString (((CString)File.cFileName ).Left (len));

}

}

//Tant qu'il existe un fichier suivant

while((FindNextFile(liste, &File))&&(FindNextFile(liste2, &File2)))

{

//Si ce fichier est un répertoire

if(File.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

{

}

else //Sinon

{

c = File.cFileName;

while(*c)

{

// RECHERCHE DU $

if(*c == '$')break;

c++;

}





len = c - File.cFileName;



//idem avec d sur f2.cFileName

c= File2.cFileName ;

while(*c)

{

// RECHERCHE DU $

if(*c == '$') break;

c++;

}



if(len != (c - File2.cFileName))// PAS BON, fichiers suivants

{

}

else

{


if(!memicmp(File.cFileName, File2.cFileName, len))
//FICHIERS T'INTERESSENT

{


m_ComboModele.AddString
(((CString)File.cFileName ).Left (len)); // ajout de la référence dans
la combobox

}

}

}

}





Par contre, y'aurai pas une autre astuce pour l'ajout dans la combobox???
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 août 2005 à 21:29
if(!memicmp(File.cFileName, File2.cFileName, len)) //FICHIERS T'INTERESSENT
{
File.cFileName[len] = 0;
m_ComboModele.AddString((CString)File.cFileName);
}

ciao...
BruNews, MVP VC++
0
cs_obby Messages postés 91 Date d'inscription vendredi 10 octobre 2003 Statut Membre Dernière intervention 12 octobre 2006
19 août 2005 à 21:43
Ok merci ca marche, maintenant reste à tester ca sur une SP2.... J'espère que ca venait de mon code (pas krè krè joli)
0
Rejoignez-nous