[C++ natif] Supprimer la fin d'une chaine de caractere

Résolu
cs_VTwin Messages postés 13 Date d'inscription samedi 29 juillet 2006 Statut Membre Dernière intervention 28 décembre 2006 - 28 déc. 2006 à 22:35
cs_VTwin Messages postés 13 Date d'inscription samedi 29 juillet 2006 Statut Membre Dernière intervention 28 décembre 2006 - 28 déc. 2006 à 23:50
Salut à vous,

J'utilise le code suivant (C++ natif sous VS2005) pour recuperer un chemin :

TCHAR X_AppPath[256];
GetCurrentDirectory(256, X_AppPath);

X_AppPath me donne par exemple : "E:\Programmes\AppCheck"

J'ai besoin de recuperer le repertoire racine, c'est à dire "E:\Programmes"

J'ai pensé à tronquer X_AppPath en supprimant le "\AppCheck", mais je ne sais pas comment faire !

Merci pour votre aide

4 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 déc. 2006 à 23:37
Faire gaffe que la currDir n'a rien à voir avec l'emplacement physique du exe, pourrait très bien être positionnée ailleurs dès le lancement par la ligne de commande du raccourci (exemple parmi tant d'autres).

Les 2 APIs retournent nbr de carac insérés donc:
baseAddresse + len => pointeur sur 0 final
et on n'a plus qu'à remonter le pointeur  jusqu'à trouver le 1er '\' qui délimite le dossier, on y met un 0 terminateur de chaine et le tour est joué.

ciao...
BruNews, MVP VC++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 déc. 2006 à 23:06
TCHAR pszdst[MAX_PATH];
TCHAR *c = pszdst + GetModuleFileName(NULL, pszdst, MAX_PATH);
while(*c != '\\') c--;
*c = 0;

ciao...
BruNews, MVP VC++
0
cs_VTwin Messages postés 13 Date d'inscription samedi 29 juillet 2006 Statut Membre Dernière intervention 28 décembre 2006
28 déc. 2006 à 23:24
Merci BruNews,

Pour mon prog, ca marche avec GetCurrentDirectory plutot que GetModuleFileName.

TCHAR X_GlobalPath[MAX_PATH];
TCHAR *c = X_GlobalPath + GetCurrentDirectory(sizeof(X_GlobalPath), X_GlobalPath);
while(*c != '\\') c--;
*c = 0;
MessageBox(NULL, X_GlobalPath, TEXT("Information"), 0);

Par contre tu peux m'expliquer comment ca fonctionne? Je crois comprendre que tu supprimes les caracteres par la fin jusqu'au premier '\', mais j'ai du mal a interpreter tout ca (sans doute à cause de l'*c  )

Merci!
0
cs_VTwin Messages postés 13 Date d'inscription samedi 29 juillet 2006 Statut Membre Dernière intervention 28 décembre 2006
28 déc. 2006 à 23:50
Super, merci à toi !

Je vais eviter le Current Dir alors

@+
0
Rejoignez-nous