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

Messages postés
13
Date d'inscription
samedi 29 juillet 2006
Statut
Membre
Dernière intervention
28 décembre 2006
- - Dernière réponse : 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
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13
3
Merci
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++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 211 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13
0
Merci
TCHAR pszdst[MAX_PATH];
TCHAR *c = pszdst + GetModuleFileName(NULL, pszdst, MAX_PATH);
while(*c != '\\') c--;
*c = 0;

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
13
Date d'inscription
samedi 29 juillet 2006
Statut
Membre
Dernière intervention
28 décembre 2006
0
Merci
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!
Commenter la réponse de cs_VTwin
Messages postés
13
Date d'inscription
samedi 29 juillet 2006
Statut
Membre
Dernière intervention
28 décembre 2006
0
Merci
Super, merci à toi !

Je vais eviter le Current Dir alors

@+
Commenter la réponse de cs_VTwin