Dans le logiciel que je maintiens, je me retrouve avec ce morceau code (répété ... trop de fois):
En gros, si args["filename"] != 0 on informe le logiciel qu'on a un nom de fichier. Si ce nom de fichier n'est pas un nom de fichier exprimé de manière absolue, alors on modifie le nom du fichier en rajoutant un chemin indiqué par scriptMgr->get_script_path()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 if ( args["action"]=="play" && args["filename"]!="") { string pathMusic; if (args["filename"][0]!='/') pathMusic = scriptMgr->get_script_path() + args["filename"]; else pathMusic = args["filename"]; media->audioMusicLoad(pathMusic); }
Le code fonctionne pour ce qu'on lui demande mais il n'y a aucun contrôle de l’existence du fichier par exemple !
Je souhaite alors modifier cela et faire disparaître cette horreur.
J'ai crée une classe qui s'occupe de faire mes tests plus proprement.
exist() est une fonction qui vérifie vraiment l'existence du fichier sur le disque dur et que son accès est possible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class FilePath { public: FilePath(std::string fileName); std::string getExtention(); std::string getPath(); std::string toString(); bool exist(); private: ... };
Enfin le constructeur FilePath fait son travail de vérification des noms du fichier
Mon morceau de code devient alors
Je l'ai mis en place sur un cas et cela fonctionne bien mieux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 if ( args["action"]=="play" && args["filename"]!="") { FilePath myFile = FilePath(args["filename"]); if (myFile.exist()) media->audioMusicLoad(myFile.toString()); else debug_message = _("command 'audio': filename not found"); }
Mais je trouve mon code final peu élégant. Aussi je viens vers vous pour me donner des pistes afin de m'améliorer !
Cordialement
Partager