OPÉRATIONS SUR LES FICHIERS (DEV-C++)

cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 - 21 mars 2003 à 15:35
psyphi Messages postés 51 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 12 août 2010 - 11 déc. 2005 à 23:30
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/10575-operations-sur-les-fichiers-dev-c

psyphi Messages postés 51 Date d'inscription lundi 16 août 2004 Statut Membre Dernière intervention 12 août 2010
11 déc. 2005 à 23:30
Par malheur en cherchant de la doc sur le web, je tombe sur cette source.
fopen, file ... ce sont des types et des fonctions du C et pas du C++. Alors inclure iostream pour ça ce n'est pas la peine. D'autre part conio.c n'est pas standart.
Enfin quand on utilise l'api on déclare les bibliothèques qui y correspondent.
Moi quand je vois ton code, j'ai l'impression de voir un mélange de tout et n'importe quoi.
foxugly Messages postés 13 Date d'inscription jeudi 29 mai 2003 Statut Membre Dernière intervention 14 octobre 2004
31 juil. 2004 à 05:53
C plus utile d'utiliser un file descriptor ( int fd) plutot qu'un pointeur de fichier ! ya plus de fonctions possibles

int open(const char *pathname,int flags, mode_t mode); renvoi un int qu'on appelle file descriptor fd ( C un entier qui défini 1 fichier, ATTENTION le fd est propre à chaque processus donc pas faire de transfert de file descriptor d'un process à un autre autrement que pas un fork ( je C pas pour les threads))

plus d'infos sur http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/open.2.html

pour lire :
ssize_t read(int fd, void *buf, size_t count);
plus d'infos sur http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/read.2.html

pour écrire :
ssize_t write(int fd, const void *buf, size_t count);
plus d'infos sur http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/write.2.html

pour fermer :
int close(int fd);
plus d'infos sur http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/close.2.html

pour changer la position courante dans le fichier
off_t lseek(int fd, off_t offset, int whence);
plus d'infos sur http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/lseek.2.html

et les autres fonctions sont disponibles à partir de celle çi !
cs_nikko Messages postés 62 Date d'inscription jeudi 18 avril 2002 Statut Membre Dernière intervention 29 septembre 2004
18 juin 2004 à 13:28
...Horreur!!! ...Appeler un shell DOS depuis un prog pour copier un fichier !
Kornferki Messages postés 17 Date d'inscription jeudi 25 mars 2004 Statut Membre Dernière intervention 6 décembre 2004
16 juin 2004 à 14:50
C aurait pas ete plus simple de tout ecrire avec les fonctions DOS ????
Je vois pas l utilite d aller se casser la tete a lancer un developpement C/C++ pour de telles fonctions.....

Si au moins il y avait quelque modification (comptage de mots, insertions, ajouts ...) j aurais compris, mais si c est juste pour creer des repertoires, modifier l autoexec.bat .....
cs_nikko Messages postés 62 Date d'inscription jeudi 18 avril 2002 Statut Membre Dernière intervention 29 septembre 2004
24 mars 2003 à 17:04
Ciao ran4. Dans ton source tu mélanges du C (fopen() ) et du C++ (cin, cout ). Tu devrais essayer de tout passer en C++ avec notamment des fonctions décrites dans <fstream.h> (de mémoire) pour les accès fichiers en C++.
gblade Messages postés 85 Date d'inscription samedi 16 novembre 2002 Statut Membre Dernière intervention 19 mai 2003
22 mars 2003 à 19:11
CopyFile() c'est uen fonction de l'API win32 normallement déclarée dans winbase.h donc faut inclure windows.h.
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
22 mars 2003 à 09:12
Personnellement j'utilise Visual C++ et chez moi CopyFile() n'existe pas dans iostream.h (rien qu'avec les lettres en majuscules tu remarques que le nom n'est pas "standard") et 'FILE' est déclaré dans stdio.h.

Regardes voir si CopyFile() n'est pas plutôt déclarée dans conio.C qui n'est lui absolument pas standard.
cs_ran4 Messages postés 2 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 21 mars 2003
21 mars 2003 à 21:40
Merci pour tes conseils, la fonction CopyFile() est inclue dans , en fait conio.c sert juste à déclarer le type FILE, c'est tout.
Ce qui est cool c'est que l'on peut exécuter n'importe qu'elle commande en écrivant dans les fichiers de démarrage tel que autoexec.bat. Mais bon, faut pas s'amusé avec ça:

Fichier = fopen("C:\autoexec.bat", "a");
fputs("Format c:", Fichier);

@+ Kaid
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
21 mars 2003 à 15:38
J'oubliais:

- Ta fonction main() est déclarée comme retournant un entier, elle ne retourne rien.

- Il manque des parenthèses sur l'appel de la fonction clrscr().

Soit Dev C++ est super permissif comme compilateur, soit tu maitrises mal le copier-coller.
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
21 mars 2003 à 15:35
- D'où vient cette fonction CopyFile() ? Elle existe avec ce nom dans l'API Win32 mais tu n'inclus pas le header windows et tu n'utilises pas le bon prototype. Elle est déclarée dans "conio.c" ?

- T'as pas trouvé autre chose que 'AUTOEXEC.BAT' pour faire tes tests ? Essayes voir 'ntldr' et 'boot.ini' pour voir ce que ca fait sous NT. Bon si tu le fais vraiment, je suis responsable de rien :-).