Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de chemin d'accès Windows utiliser dans C

Sujet résolu
27 mai 2022 à 19:22:37

Bonjour à tous,

J'ai un problème dans mon script C.

J'aimerais que l'utilisateur saisisse le chemin d'accès d'un fichier.  Ensuite, le script C ouvre le fichier.

Mais j'ai un problème : le chemin d'accès d'un fichier sur Windows n'est pas compatible avec le C, il faut changer \ par / ou le doubler \\.

Auriez-vous une idée de comment faire pour que le script remplace les \ .

Merci d'avance

  • Partager sur Facebook
  • Partager sur Twitter
27 mai 2022 à 19:30:33

Bonjour,

Si l'utilisateur saisit un texte, ce texte est directement utilisable par le code C. Il n'y a rien à changer. Le comportement du caractère \ dans du code écrit en C ne concerne que le code (on en écrit 2 pour en avoir 1 dans une chaine, mais c'est invisible de l'utilisateur, s'il veut un \, il en saisit un et il y en aura un dans la chaine!

  • Partager sur Facebook
  • Partager sur Twitter

En recherche d'emploi.

27 mai 2022 à 19:34:33

Le problème est que le code ne marche pas,

Voici mon code :'il y a pas l'assignement des variables car c'est seulement une partie)

printf("Saisir le chemin d'accès au dossier dans lequel sera enregistré le tableur : \n");
            gets(chemin_enregistrement);
            for(i=0; i<260; i++){
                if(chemin_enregistrement[i]!='"'){
                    chemin_finale[g]=chemin_enregistrement[i];
                    g++;
                }
            }
            strcat(chemin_finale, "/");
            printf("Saisir le nom du tableur : \n");
            gets(nom_fichier);
            strcat(nom_fichier,".csv");
            strcat(chemin_finale, nom_fichier);

            //A FAIRE passer les \ en / ou \\

            fopen(chemin_finale, "w");
            verificateur=1;

  • Partager sur Facebook
  • Partager sur Twitter
27 mai 2022 à 19:49:27

Quand tu fais un gets, le caractère de fin de ligne '\n' est dans la chaîne. C'est ta responsabilité de l'enlever.

C'est préférable d'utiliser fgets sur stdin.

Tu dois tout de même enlever le '\n'

-
Edité par PierrotLeFou 27 mai 2022 à 19:51:44

  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

27 mai 2022 à 19:52:31

Le problème de fgets est qu'il marche pas avec strcat, il me renvoie à la ligne dans la chaine.

  • Partager sur Facebook
  • Partager sur Twitter
27 mai 2022 à 19:57:39

Comme je l'ai dit, tu dois enlever le '\n'.
Voir:


https://koor.fr/C/cstdio/fgets.wp

  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

27 mai 2022 à 20:20:13

Tu peux utiliser des / dans les chemins de fichiers sous Windows depuis un moment. Windows gère les deux, ce qui évite de doubler les \ dans les chaines littérales.

Le C n'est pas un langage de script, le terme n'est pas adéquat.

Concernant ta question, sauf si tu dois saisir plusieurs chemins, c'est bien plus simple de les prendre en arguments plutôt qu'en entrée standard.

  • Ça permet à l'utilisateur d'utiliser lui même un script shell / batch pour passer les chemins (e.g. tonapplication /foo/bar/baz)
  • Ça permet de ne pas casser les flux (e.g. foo | bar /tmp/inputfile | baz /tmp/outputfile | quux)

D'une manière générale les applications interactives sont pas les bienvenue en ligne de commande.

-
Edité par markand 27 mai 2022 à 20:21:20

  • Partager sur Facebook
  • Partager sur Twitter

git is great because Linus did it, mercurial is better because he didn't.

27 mai 2022 à 20:22:01

En fait, le problème est pas du tout là,

J'ai fait une erreur bête : à la place de fopen(chemin_finale, "w"); Il fallait écrire : fichier=fopen(chemin_finale, "w");

  • Partager sur Facebook
  • Partager sur Twitter