Bonjour, je voudrais de l'aide pour cet exercice de langage C
Ecrire un programme en C qui copie un fichier avec ses options (on prendra en compte un fichier source et un fichier destination)
Voici mon code. Mais quand je compile ça ne marche pas.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Affiche l'erreur errStr, puis l'aide du programme
void printError(char * prgName, char * errStr) {
printf("Error : '%s'\n", errStr);
}
int main(int argc, char *argv[])
{
FILE* fichier_1 = NULL;
FILE* fichier_2 = NULL;
char* option;
char *src, *dest;
char* commande;
if(argc == 3) {
option="";
fichier_1 = fopen(argv[1], "r+");
fichier_2 = fopen(argv[2], "r+");
src=argv[1];
dest=argv[2];
}else if(argc == 4) {
option=argv[1];
fichier_1 = fopen(argv[2], "r+");
fichier_2 = fopen(argv[3], "r+");
src=argv[2];
dest=argv[3];
}else{
printError( argv[0], "number d'argument incorrect" );
return EXIT_FAILURE;
}
if (fichier_1 == NULL )
{
printError( argv[1], "Impossible d'acceder a ce fichier" );
return EXIT_FAILURE;
}
if (fichier_2 == NULL ){
printError( argv[2], "Impossible d'acceder a ce fichier" );
return EXIT_FAILURE;
}
commande="cp ";
commande=strcat(commande, option);
commande=strcat(commande, src);
commande=strcat(commande, dest);
if ((strcmp(option, "-f") == 0)|| (strcmp(option, "-i") == 0) || (strcmp(option, "-i")==0) || (strcmp(option, "-R") == 0) || (strcmp(option, "-r") == 0 )|| (strcmp(option, "-s") == 0) || (strcmp(option, "-v") == 0)){
system(commande);
} else
{
printError(argv[2], "Option invalide" );
return EXIT_FAILURE;
}
fclose(fichier_1);
fclose(fichier_2);
return EXIT_SUCCESS;
}
Bonjour,
Chez moi le code compile sans problème.
Tu es sûr que les difficultés n'apparaissent pas à l'exécution ?
Tu le lances le programme avec combien d'arguments sur la ligne de commande ?
Nicolas
J'utilise DEV C++
Quand j'ai terminé j'ai fait compiler et exécuter et çà m'affiche le tableau en noir.
Pouvez m'expliquer comment vous l'avez compiler pour que ça marche
Tu lances le programme avec quels arguments sur la ligne de commande ?
Je ne sais pas comment on fait pour lancer le programme avec des arguments sur la ligne de commande.
Quand je clique sur le bouton compiler et exécuter j'ai ce message sur le terminal :
Error 'nombre d'argument incorrect'
......................................................
Process exited after 0.004585 seconds with return value 1
Appuyez sur une touche pour continuer...
Mais quand j'appuie sur une touche pour continuer le terminal se referme
Ce que je comprends...
Ton programme compile.
Quand tu l'exécutes, il renvoie :
Dans DEV C++ j'ai pas l'option Exécuter/Propriétés , par contre j'ai l'option Exécuter/Paramètres.
Comme vous le voyez dans l'image ci-jointe
Pouvez-vous me donner un exemple des arguments à rentrer.
J'ai essayé avec des chiffres de 0 à 10. Mais ça ne donne pas grand chose
Je suis surpris par tes questions.
C'est bien toi qui a écrit le programme ? ("mon code")
Qu'attend-il comme argument ?
Comment fonctionne-t-il ?
Après les "print errors", mets un "getchar();" pour que la fenêtre ne se ferme pas
Remplace les deux "Impossible d'acceder a ce fichier" par "Impossible d'acceder au fichier 1" et "Impossible d'acceder au fichier 2" pour mieux cerner l'erreur.
J'ai compilé le code : cela produit un fichier exe.
J'ai copié une image "Image1.png" dans le répertoire de l'exe.
Depuis une invite MS-DOS de Windows ("cmd"), j'ai exécuté :
Ile644763.exe Image1.png Image2.png
et il renvoie l'erreur "Impossible d'acceder au fichier 2"
Le problème est donc le fopen sur le fichier destination
Es-tu sûr que tu peux faire un fopen sur un fichier qui n'existe pas ?
Nicolas
PS - également posté dans https://openclassrooms.com/forum/sujet/commande-linux-en-c
En fait, tu n'as aucun besoin de faire des fopen, puisque tu copies ensuite le fichier en faisant en construisant et en lançant une instruction DOS "cp".
Le programme ci-dessous compile et fonctionne.
Pour le faire fonctionner, j'ai copié une image "Image1.png" dans le répertoire de l'exe.
Depuis une invite MS-DOS de Windows ("cmd"), j'ai exécuté :
Ile644763.exe Image1.png Image2.png
#include
#include
#include
// Affiche l'erreur errStr, puis l'aide du programme
void printError(char * prgName, char * errStr) {
printf("Error : '%s'\n", errStr);
}
int main(int argc, char *argv[]) {
char *src, *dest, *option;
char commande[1000];
if (argc == 3) {
option = "";
src = argv[1];
dest = argv[2];
} else if (argc == 4) {
option = argv[1];
src = argv[2];
dest = argv[3];
} else {
printError(argv[0], "Nombre d'arguments incorrect" );
getchar();
return EXIT_FAILURE;
}
strcpy(commande, "cp ");
strcat(commande, option);
strcat(commande, " ");
strcat(commande, src);
strcat(commande, " ");
strcat(commande, dest);
printf("Commande : | %s |\n", commande);
system(commande);
return EXIT_SUCCESS;
}
D'accord je vais essayé d'améliorer le programme. Mais je ne vois pas dans ton programme les options de cp c'est à dire cp -i; cp -r; cp -f etc...
MERCI
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :