Langage C gestion fichiers et répertoires
Fermé
youscoul
Messages postés
125
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
7 janvier 2013
-
11 juin 2010 à 10:00
Utilisateur anonyme - 11 juin 2010 à 15:35
Utilisateur anonyme - 11 juin 2010 à 15:35
A voir également:
- Gestion de fichier en c
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Fichier host - Guide
12 réponses
Utilisateur anonyme
11 juin 2010 à 10:33
11 juin 2010 à 10:33
salut !
alors déja, il faut que tu initialise la taille de tes char * , sinon ca plantera ou buggera souvent.
ensuite pour ta méthode mkdir je suppose que tu l'as créer ou alors que tu as un .h qui les as .?
alors déja, il faut que tu initialise la taille de tes char * , sinon ca plantera ou buggera souvent.
ensuite pour ta méthode mkdir je suppose que tu l'as créer ou alors que tu as un .h qui les as .?
youscoul
Messages postés
125
Date d'inscription
dimanche 10 août 2008
Statut
Membre
Dernière intervention
7 janvier 2013
4
11 juin 2010 à 11:33
11 juin 2010 à 11:33
Merci,
En fait, j'ai dejà un include<dirent.h> desolé de l'avoir oublié ici.
Les methodes mkdir créent bien mon arborescence, mais je sais pas comment mettre un fichier specficique dans une arborescence specifique.
En fait, j'ai dejà un include<dirent.h> desolé de l'avoir oublié ici.
Les methodes mkdir créent bien mon arborescence, mais je sais pas comment mettre un fichier specficique dans une arborescence specifique.
Utilisateur anonyme
11 juin 2010 à 12:06
11 juin 2010 à 12:06
ok je vois, je ne connais pas cette bibliothèques. mais avec system.h tu pourras faire :
char * emplacement = "c:\mondossier1\mondossier2\ ... ";
puis tu pourras faire :
char commande[500] = "copy MonFichier.jesaispas \0";
strcat(commande , emplacement);
system(commande);
en gros ca fera dans ta console :
copy MonFichier.jesaispas c:\mondossier1\mondossier2\
ce qui copiera ton fichier dans le chemin (ou dossier ou ce que tu veux)
et tu récupère le chemin grâce à l'arborescence et la recherche)
char * emplacement = "c:\mondossier1\mondossier2\ ... ";
puis tu pourras faire :
char commande[500] = "copy MonFichier.jesaispas \0";
strcat(commande , emplacement);
system(commande);
en gros ca fera dans ta console :
copy MonFichier.jesaispas c:\mondossier1\mondossier2\
ce qui copiera ton fichier dans le chemin (ou dossier ou ce que tu veux)
et tu récupère le chemin grâce à l'arborescence et la recherche)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
11 juin 2010 à 13:02
11 juin 2010 à 13:02
A nagashima
char * emplacement = "c:\mondossier1\mondossier2\ ... ";
Attention, il faut doubler l'antislash.
char commande[500] = "copy MonFichier.jesaispas \0";
Pas besoin de \0.
copy n'est pas une commande GNU/Linux reconnu. Il s'agit de cp.
system(commande);
Vraiment sale ^^. Autant programmer en shell dans ce cas ^^.
A youscoul
La fonction permettant de copier un fichier dans un répertoire n'existe pas en C de manière standard. Il faut donc te la créer. Tu te crées le fichier avec fopen, ensuite tu parcours le fichier source et tu le copies ligne par ligne dans ton fichier destination (fgets, fprintf).
Cordialement,
char * emplacement = "c:\mondossier1\mondossier2\ ... ";
Attention, il faut doubler l'antislash.
char commande[500] = "copy MonFichier.jesaispas \0";
Pas besoin de \0.
copy n'est pas une commande GNU/Linux reconnu. Il s'agit de cp.
system(commande);
Vraiment sale ^^. Autant programmer en shell dans ce cas ^^.
A youscoul
La fonction permettant de copier un fichier dans un répertoire n'existe pas en C de manière standard. Il faut donc te la créer. Tu te crées le fichier avec fopen, ensuite tu parcours le fichier source et tu le copies ligne par ligne dans ton fichier destination (fgets, fprintf).
Cordialement,
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
11 juin 2010 à 13:37
11 juin 2010 à 13:37
pour le '\0' c'est pour la fin de commande fin bon.
c'est vrai que c'est pas trés propre mais c'est au plus simple pour ce qui veut faire je pense ^^
c'est vrai que c'est pas trés propre mais c'est au plus simple pour ce qui veut faire je pense ^^
Utilisateur anonyme
11 juin 2010 à 13:48
11 juin 2010 à 13:48
erf oui j'avais zappé qu'il était sous linux donc je pensais pas a certaines choses x) (genre les commandes 'fin bon)
la gestion de fichier peu etre une solution plus propre en effet au niveau du code,mais au final ca fera juste la meme chose : une copie de fichier n'en est que la réecriture donc autant profiter des appels console qui fonctionnent bien. après vous faites comme vous voulez ;)
la gestion de fichier peu etre une solution plus propre en effet au niveau du code,mais au final ca fera juste la meme chose : une copie de fichier n'en est que la réecriture donc autant profiter des appels console qui fonctionnent bien. après vous faites comme vous voulez ;)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
11 juin 2010 à 14:01
11 juin 2010 à 14:01
Nagashima,
Je réponds pour tes deux posts.
pour le '\0' c'est pour la fin de commande fin bon.
Oui, mais quand tu mets char toto[]="coucou"; tu as le \0 qui se greffe automatiquement en fin de chaîne.
la gestion de fichier peu etre une solution plus propre en effet au niveau du code,mais au final ca fera juste la meme chose : une copie de fichier n'en est que la réecriture donc autant profiter des appels console qui fonctionnent bien. après vous faites comme vous voulez ;)
Euh non mais alors pas du tout. D'une part, c'est moins performant en allouant la place nécessaire pour l'ouverture de la console, l'écriture et l'exécution. Et puis le fait que la console s'ouvre, ça ne le fait pas.
Autant, on peut utiliser les appels au kernel via des API à condition de bien le séparer du code standard pour faciliter la portabilité du code. Mais pour utiliser des appels consoles, non. La manière conseillée en C, c'est de se faire la fonction soi-même. En plus, écrire un programme en C en usant des appels consoles est non seulement plus compliqués, plus long, et moins performant que son homologue écrit en bash.
Eh oui, le C c'est pas si facile ;-))).
Je réponds pour tes deux posts.
pour le '\0' c'est pour la fin de commande fin bon.
Oui, mais quand tu mets char toto[]="coucou"; tu as le \0 qui se greffe automatiquement en fin de chaîne.
la gestion de fichier peu etre une solution plus propre en effet au niveau du code,mais au final ca fera juste la meme chose : une copie de fichier n'en est que la réecriture donc autant profiter des appels console qui fonctionnent bien. après vous faites comme vous voulez ;)
Euh non mais alors pas du tout. D'une part, c'est moins performant en allouant la place nécessaire pour l'ouverture de la console, l'écriture et l'exécution. Et puis le fait que la console s'ouvre, ça ne le fait pas.
Autant, on peut utiliser les appels au kernel via des API à condition de bien le séparer du code standard pour faciliter la portabilité du code. Mais pour utiliser des appels consoles, non. La manière conseillée en C, c'est de se faire la fonction soi-même. En plus, écrire un programme en C en usant des appels consoles est non seulement plus compliqués, plus long, et moins performant que son homologue écrit en bash.
Eh oui, le C c'est pas si facile ;-))).
Utilisateur anonyme
11 juin 2010 à 14:30
11 juin 2010 à 14:30
pour ce qui est de la console, elle peu toujours s'exécuter en silent il me semble mais après ça c'est juste un petit détail.
Après en effet tu utilisera l'ouverture de la console en plus par rapport à la recopie du fichier ce qui prendra un peu plus de mémoire, mais perso je trouve pas une grande différence ... mais j'avoue coder en ce moment sur un pc où la mémoire n'est pas un problème (en tout cas si ça se joue à quelques Ko) ce qui peu porter défaut dans ma réflexion (j'ai pas codé pour microCtr depuis deux ans et je reconnais avoir pris de mauvaises habitudes ><)
pour ce qui est du \0 c'est juste que j'ai pris l'habitude juste pour être sûr (j'ai déjà eu 2/3 problèmes donc c'est devenu une habitude.
J'ai l'impression de me justifier xD, en tout cas, la recopier de fichier via file* est une bonne idée, mais je ne voit pas comment on peut se positionner dans un emplacement du disque sans passer par la console, je suis donc tout ouïe pour la solution que vous trouverez pour ca \o/
Après en effet tu utilisera l'ouverture de la console en plus par rapport à la recopie du fichier ce qui prendra un peu plus de mémoire, mais perso je trouve pas une grande différence ... mais j'avoue coder en ce moment sur un pc où la mémoire n'est pas un problème (en tout cas si ça se joue à quelques Ko) ce qui peu porter défaut dans ma réflexion (j'ai pas codé pour microCtr depuis deux ans et je reconnais avoir pris de mauvaises habitudes ><)
pour ce qui est du \0 c'est juste que j'ai pris l'habitude juste pour être sûr (j'ai déjà eu 2/3 problèmes donc c'est devenu une habitude.
J'ai l'impression de me justifier xD, en tout cas, la recopier de fichier via file* est une bonne idée, mais je ne voit pas comment on peut se positionner dans un emplacement du disque sans passer par la console, je suis donc tout ouïe pour la solution que vous trouverez pour ca \o/
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
11 juin 2010 à 14:56
11 juin 2010 à 14:56
Un autre inconvénient de la console, c'est que ce n'est absolument pas portable puisque chaque commande est propre à l'OS ^^.
Sinon, tu ne vois pas comment te positionner dans un emplacement du disque ?
Peux-tu être plus précis et donner un exemple ? Et je te donne la solution (enfin j'espère) ^^?
Sinon, tu ne vois pas comment te positionner dans un emplacement du disque ?
Peux-tu être plus précis et donner un exemple ? Et je te donne la solution (enfin j'espère) ^^?
Utilisateur anonyme
11 juin 2010 à 15:14
11 juin 2010 à 15:14
et bien en prenant son exemple.
sinon disons que l'on se trouve dans le fichier du projet (peu importe) et qu'on veuille aller sous /etc (sous linux) uniquement par le code sans appel console, je ne sais pas (de même sous windows par exemple, sauf que ca serai c:\windows).
par conter je sais faire des ifndef pour la portabilité mdr (en fin de compte, mon problème est le même que youscoul si on ne veut pas prendre la console =) )
sinon disons que l'on se trouve dans le fichier du projet (peu importe) et qu'on veuille aller sous /etc (sous linux) uniquement par le code sans appel console, je ne sais pas (de même sous windows par exemple, sauf que ca serai c:\windows).
par conter je sais faire des ifndef pour la portabilité mdr (en fin de compte, mon problème est le même que youscoul si on ne veut pas prendre la console =) )
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
11 juin 2010 à 15:32
11 juin 2010 à 15:32
Si tu souhaites ouvrir un fichier qui se trouve dans un autre répertoire, comme /etc, tu mets juste FILE*fp=fopen("/etc/toto","r");
Néanmoins, tu peux aussi changer de répertoire courant via l'utilisation de la fonction POSIX chdir().
Néanmoins, tu peux aussi changer de répertoire courant via l'utilisation de la fonction POSIX chdir().
Utilisateur anonyme
11 juin 2010 à 15:35
11 juin 2010 à 15:35
ah ok, j'étais pas sur que mettre le chemin dans fopen fonctionnait (d'un autre côté j'avais pas testé ... ^^)
merci de l'info !
merci de l'info !