Aide pour creer un nouveau fichier [C] - C++ - Programmation
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...)
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.
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).
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).
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). |
Les méfaits du VB sur la jeunesse
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...
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 :-(
Marsh Posté le 15-06-2002 à 18:12:56
http://msdn.microsoft.com/library/ [...] _order.asp
http://msdn.microsoft.com/library/ [...] f_4sft.asp
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"...
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 ...
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 ?
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.
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
Sous 9x faut passer par les vxd (et j'ai tjrs pas compris comment ça marchait)
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 !
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)
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 ?
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 ? |
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