Dans le logiciel que je maintiens, je me retrouve avec ce morceau code (répété ... trop de fois):

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);
}
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()

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.

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:
	...
};
exist() est une fonction qui vérifie vraiment l'existence du fichier sur le disque dur et que son accès est possible.
Enfin le constructeur FilePath fait son travail de vérification des noms du fichier

Mon morceau de code devient alors

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");
}
Je l'ai mis en place sur un cas et cela fonctionne bien mieux.
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