[C++] récuperer la réponse d'une commande DOS [Fermé]

Signaler
Messages postés
1
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
19 juillet 2007
-
 Rémi -
Bonjour,

Pour comparer, renomer et trier un tas de fichiers, je voudrais faire un programme en C++.
Pour cela j'ai découvert aujourd'hui pleins de choses (je connais un peu mais je ne suis pas encore bilingue C++) et j'en suis arrivée à la conclusion que j'avais rudement envie de mélanger des commandes DOS à mon programme de C++, en faisant qqs commandes batch à côté.

les fichiers (en fait ce sont des photos) se trouvent dans pleins de répertoires (l'endroit où elles ont été prises), et je ne peux les mélanger car dans chaque répertoire il y a photo1, photo2, etc.

donc, ce que je pensais faire :
1/ avoir le MD5 de chaque photo
2/ les trier
3/ les comparer 2 à 2, puis supprimer les photos qui sont en double
4/ renommer la photo : nom_du_lieu_i.jpg

(c'est pour cela que je pensais utiliser les commandes dos, à moins qu'on ne puisse le faire autrement en C++)
Donc, mon vrai problème :
- comment stocker dans des variables C++ les résultats de la commande DOS?
et, à l'inverse :
- comment insérer une variable C++ dans une commande DOS?


parce qu'une fois que j'ai le chemin d'accès jusqu'à une photo, il faut en sortir le code MD5 et le stocker dans une variable pour faire le tri, à la fin. Puis, une fois que j'ai fait le tri (en C++), il faut que j'aie en variable le chemin d'accès (si j'ai bien tout compris, on peut l'avoir avec le MD5) à ladite photo, pour aller la supprimer (avec une commande DOS).

j'ai pensé à sortir les résultats de la commande DOS dans un fichier txt, pour ensuite le lire en C++, mais il doit y avoir plus simple, et puis ensuite je dois faire le chemin inverse mais je ne sais même pas quel est le nom de la commande pour lire un fichier txt en DOS.

Donc, si vous pouviez m'aider en me disant si c'est possible de faire ce que je prévois de faire, et quelles commandes je dois utiliser (et comment ça marche en vrai si vous avez le temps, parce que findfile, findfirst.. j'ai rien compris), votre nom serait pour toujours gravé dans mon coeur (ouais enfin à peu près).
voilà voilà, merci merci.

1 réponse

comment stocker dans des variables C++ les résultats de la commande DOS, ça je sais pas,
et c'est justement ce que je cherche aussi.

Par contre, pour lire la première ligne d'un fichier en DOS,
il suffit de faire :

set /p MAVARIABLE=(Chargement ...)<monfichier.txt

il ne reste plus qu'à l'afficher : "echo %MAVARIABLE%" ou à la récupérer en C++
je ne sais pas comment.

comment insérer une variable C++ dans une commande DOS :

Je suppose que tu utilise la commande : "int system(const char *command)" pour
exécuter du code MS-DOS en C++.
Une solution serait celle ci (pour afficher du texte par exemple) :

#include <iostream>

int (*MSDOSEx) (const char *command) = system;

const unsigned char NULL_CHAR = 0x00;
const char M_BEGINN[] = "ECHO ";
const long M_BEGIN_LENGTH = 5;

void Print(char*);
long Len(char*);

void Print(char *str)
{
long M_NUM; char *M_RESULT;
M_RESULT = (char*) malloc(sizeof(char) * (M_BEGIN_LENGTH + Len(str) + 1));
for (M_NUM = 0; M_NUM < M_BEGIN_LENGTH; M_NUM++)
M_RESULT[M_NUM] = M_BEGINN[M_NUM];
for (M_NUM = 0; M_NUM < Len(str); M_NUM++)
M_RESULT[(M_NUM + M_BEGIN_LENGTH)] = str[M_NUM];
M_RESULT[(M_NUM + M_BEGIN_LENGTH)] = (char) NULL_CHAR;
MSDOSEx(M_RESULT); free(M_RESULT); return;
}

long Len(char *str)
{
unsigned char *M_BUFFER; M_BUFFER = (unsigned char*) str;
long M_LENGTH; M_LENGTH = 0;
while (*M_BUFFER != NULL_CHAR)
{ M_LENGTH++; M_BUFFER++; }
return M_LENGTH;
}

int main(int argc, char *argv[])
{
Print("Hello world");
system("PAUSE");
return 0;
}

Voilà. En fait, je ne respecte ici pas vraiment la déclaration de la fonction system,
car je ne lui donne pas une constante (const), mais certains compilateurs l'accèptent
(le mien en tout cas (Dev-C++)).

J'espère avoir en partie répondu à ta question,
et j'aimerais aussi connaître la réponse à la question :
comment stocker dans des variables C++ les résultats de la commande DOS ?

Merci d'avance.