[C] Aide pour creer un nouveau fichier

Aide pour creer un nouveau fichier [C] - C++ - Programmation

Marsh Posté le 15-06-2002 à 15:56:31    

Bonjour, je cherche à créer, à partir d'une liste de noms dans un fichier texte un certain nombre de fichiers texte (ou de repertoires ca serait encore mieux) portant les différents noms contenus dans le fichier source.
Quels sont les paramétres d'appel de la fonction CreateFile ? En existe-t-il un equivalent pour les répértoires?
J'ai essayer de creer mes fichiers avec cette ligne (pompée sur un précédent post), mais je n'ai qu'une erreur de win2K lors de l'execution:
 
FILE *newfile;
newfile = CreateFile( "C:\Documents and Settings\a\Bureau\FICHIERtest", GENERIC_READ | GENERIC_WRITE,
                                    0, NULL, OPEN_ALWAYS,
                                   FILE_ATTRIBUTE_NORMAL, NULL );
 
 
Merci pour l'aide

Reply

Marsh Posté le 15-06-2002 à 15:56:31   

Reply

Marsh Posté le 15-06-2002 à 16:15:12    

faut mettre des \\ vu que \ indique un début de caractère spécial (\n = retour de ligne, etc...)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 15-06-2002 à 16:19:37    

A priori, je dirais qu'il faut remplacer OPEN_ALWAYS par CREATE_ALWAYS
 
CreateFile permet aussi d'accéder aux répertoires.

Reply

Marsh Posté le 15-06-2002 à 16:52:00    

Ok, merci pour les réponse, je pense avoir résolu mon prb en utilisant la commande system(mkdir).

Reply

Marsh Posté le 15-06-2002 à 17:23:14    

Bon, en fait, mon prb n'est pas résolu: je veus créer un dossier (au pire un fichier) qui porte lenom contenu dans la chaine de caractére buffer_carc.Le probleme, c'est que si je met:
 
system("mkdir buffer_carac" )
 
le dossier créé s'appelle buffer_carac; j'ai essayé un truc du genre:
 
system("mkdir %s",buffer_carac)mais ca ne fonctionne pas (c'est pas les bons parametres d'appel).

Reply

Marsh Posté le 15-06-2002 à 17:29:37    

AlexKF a écrit a écrit :

Bon, en fait, mon prb n'est pas résolu: je veus créer un dossier (au pire un fichier) qui porte lenom contenu dans la chaine de caractére buffer_carc.Le probleme, c'est que si je met:
 
system("mkdir buffer_carac" )
 
le dossier créé s'appelle buffer_carac; j'ai essayé un truc du genre:
 
system("mkdir %s",buffer_carac)mais ca ne fonctionne pas (c'est pas les bons parametres d'appel).  




 
 :pt1cable: Les méfaits du VB sur la jeunesse :lol:

Reply

Marsh Posté le 15-06-2002 à 17:30:34    

Y a une fonction CreateDirectory ou un truc du genre, c'est nettement plus propre que passer par System...


Message édité par antp le 15-06-2002 à 17:30:54

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 15-06-2002 à 18:03:30    

Ha ces djeunes......
Vous allez dire que j'abuse, mais quelle est le prototype de CreateFolder, J'ai un éditeur/compilateur tout pouri sans aide sur les foncions :-(

Reply

Marsh Posté le 15-06-2002 à 19:28:25    

Question bete: a quoi ca sert d'utiliser "CreateFile" pour un truc aussi banal (la, ca en a bien l'air) que les lectures/ecritures dans des fichiers. Autant utiliser "fopen"...

Reply

Marsh Posté le 15-06-2002 à 19:28:25   

Reply

Marsh Posté le 17-06-2002 à 10:36:35    

Ouai, où même ofstream.
Après faut voir ce qu'il veut faire, s'il veut vraiment utiliser des truc spécifiques windows (je crosi pas là :)) ça justifie d'utiliser CreateFile, si non ...


---------------
Le Tyran
Reply

Marsh Posté le 19-06-2002 à 19:18:13    

si je me trompe dites le moi, mais il me semble que les fonctions de plus bas niveau, et donc les plus rapides sont celles de l'API de windows
 
si son programme n'a pas a etre porté sous unix ou autre chose, pourquoi s'emmerder avec des surcouches telles que std::fstream ou fopen ?

Reply

Marsh Posté le 19-06-2002 à 19:21:08    

Là je suis pas sûr


---------------
Le Tyran
Reply

Marsh Posté le 19-06-2002 à 19:31:08    

C pas compliqué il suffit de regarder le code de la stl.
mais je l'ai pas sur place
 
Mais a mon avis j'ai raison parce que les fichiers de windows ne peuvent etre accédés que par l'API de l'OS, et pas directement en tapant sur le disque physique (au moins sous NT/2000)
Donc tout ce qui fait de l'acces aux fichiers est forcement surcouche de cette API.
Sinon c basé sur un enorme reverse engeneering forcement foireux.
 
Sous un OS open source c possible de court circuiter l'API native par contre.

Reply

Marsh Posté le 19-06-2002 à 19:34:14    

Oualb a écrit a écrit :

C pas compliqué il suffit de regarder le code de la stl.
mais je l'ai pas sur place
 
Mais a mon avis j'ai raison parce que les fichiers de windows ne peuvent etre accédés que par l'API de l'OS, et pas directement en tapant sur le disque physique (au moins sous NT/2000)
Donc tout ce qui fait de l'acces aux fichiers est forcement surcouche de cette API.
Sinon c basé sur un enorme reverse engeneering forcement foireux.
 
Sous un OS open source c possible de court circuiter l'API native par contre.  




HeHe tout faux, y a que sous 200,NT et XP qu'on peux aller directement taper sur le disque :D
Sous 9x faut passer par les vxd (et j'ai tjrs pas compris comment ça marchait)


---------------
Le Tyran
Reply

Marsh Posté le 19-06-2002 à 19:44:11    

sous 2000 NT ET XP on peut aller taper sur le disque physique en donnant un numero de cylindre et de secteur ?
 
alors ca ca m'etonnerait beaucoup !!
 
si tu trouves ca, je veux bien voir un bout de code qui fait ca et qui se prend pas un access denied de la part de l'OS !

Reply

Marsh Posté le 19-06-2002 à 19:51:36    

CreateFile("\\.\PHYSICALDRIVE2"....
 
Ensuite tu utilise DeviceIoControl (pour plus de détail voit la msdn, pour l'instant la partie sur  DeviceIoControl de leur site est down)


---------------
Le Tyran
Reply

Marsh Posté le 19-06-2002 à 22:17:13    

Oualb a écrit a écrit :

si je me trompe dites le moi, mais il me semble que les fonctions de plus bas niveau, et donc les plus rapides sont celles de l'API de windows
 
si son programme n'a pas a etre porté sous unix ou autre chose, pourquoi s'emmerder avec des surcouches telles que std::fstream ou fopen ?  




 
Parce que tu as moins de parametres, donc tu vas gagner du temps en dev.
Parce que les fonctions des lib standards (C et C++) peuvent faire des I/O formattees et non-formattees.
Et puis, tu vas gagner des clopinettes en temps, quand il s'agit de lire 10 chaines de caracteres.
 
Et tant que t'y es, pourquoi pas des I/O asynchrones et des threads ?

Reply

Marsh Posté le 19-06-2002 à 22:19:09    

kenshiro182 a écrit a écrit :

 
 
Parce que tu as moins de parametres, donc tu vas gagner du temps en dev.
Parce que les fonctions des lib standards (C et C++) peuvent faire des I/O formattees et non-formattees.
Et puis, tu vas gagner des clopinettes en temps, quand il s'agit de lire 10 chaines de caracteres.
 
Et tant que t'y es, pourquoi pas des I/O asynchrones et des threads ?  




 
:lol:


---------------
Le Tyran
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed