Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème avec std::string::find_first_not_of

1 réponse
Avatar
Michaël Delva
Bonjour à tous,

Je voudrais dans mon programme créer des "raccourcis" dans les chemins de
mes fichiers. Ex:

mon programme se trouve ici: "C:\Program Files\MonApp\app.exe"
il me donne ceci: "$(MonApp)\app.exe"

si un fichier se trouve sur un CDROM "D:\fichier.txt"
il me donne ceci: "$(CDROM)\fichier.txt"

Ceci afin de ne pas écrire en dur les chemins de mes fichiers, et que je
puisse "porter" le programme sur d'autres machines sans devoir tout
modifier.

Bref, j'arrive pour l'instant à modifier un chemin pour qu'il me prenne
en compte les raccourcis.

Mais détecter les raccourcis et réécrire le chemin me pose problème, du
moins pour le CD-ROM.

Si je lui passe ça: "$(MVS)\\Stats\\", il me donne bien "C:\Program Files
\MVS\Stats\"

Par contre si je lui passe ça: "$(CDROM)\\Stats\\", il me donne
"C:\Program Files\MVS\(CDROM)\Stats\"


Voici la fonction:

//-----------------------------------------------------------------------
AnsiString __fastcall Load_Path(const AnsiString & path)
{
std::string old_path = path.c_str();

std::string::size_type begin = 0,
racc_app = 0,
racc_cd = 0;

//S'il ne trouve pas de raccourci, il retourne le path d'entrée
std::string new_path = old_path;

//Les variables
const std::string path_application = "C:\\Program Files\\MVS\\";
const std::string path_CD = "D:\\";
const std::string raccourci_MVS = "$(MVS)\\";
const std::string raccourci_CDROM = "$(CDROM)\\";

//On cherche le raccourci de l'application
racc_app = old_path.find_first_not_of(raccourci_MVS,begin);
//On cherche le raccourci du CDROM
racc_cd = old_path.find_first_not_of(raccourci_CDROM,begin);

if (racc_app != begin)
new_path = old_path.replace(begin,racc_app-1,path_application);
else if (racc_cd != begin)
new_path = old_path.replace(begin,racc_cd-1,path_CD);

return new_path.c_str();
}
//-----------------------------------------------------------------------

Vous voyez d'où ça peut venir?

Merci d'avance!

1 réponse

Avatar
Michaël Delva
Bon, ben je viens de trouver:

AnsiString new_path;

racc = old_path.find(raccourci_MVS,begin);
racc_cd = old_path.find(raccourci_CDROM,begin);

if (racc == begin)
new_path = old_path.replace(begin,raccourci_MVS.size
(),path_application).c_str();
else if (racc_cd == begin)
new_path = old_path.replace(begin,raccourci_CDROM.size
(),path_CD).c_str();

fonctionne bien...

Désolé d'avoir posté pour rien!