CreateFile

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 11 mai 2004 à 19:23
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 11 mai 2004 à 20:50
J'ai un tableau contenant les valeurs ASCII d'un chaine de caractere.
J'aimerai ouvrir un fichier en binaire et y ecrire s'est valeur en binaire qui ont chacune un offset bien précis.

ex: Offset : 80
Valeur : 255

... et ainsi de suite ...

Comment faire ca en Win32 (CreateFile, SetFilePointer,WriteFile,...) et en C (fopen, fseek, write,...)?
Les deux methodes me vont.

Merci par avance

Samir

12 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
11 mai 2004 à 19:39
je ne sais pas si c'est moi qui ai un problème, mais je trouve ton message incompréhensible. Qu'est ce que tu veux faire exactement, et pourquoi écrire 255 à l'offset 80?
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
11 mai 2004 à 19:40
255 est la valeur ascii du caractere...
Et je veux ecrire cette valeur en binaire dans mon fichier que j'aura ouvert au préalable en binaire.
Puis faut mettre cette valeur a la position 80 (offset)

Samir
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 mai 2004 à 19:41
disons que tu as un buffer contenant du texte:
char szbuff[260]; // contient texte

HANDLE hfl;
DWORD len, d;
// ouvert ECRITURE et EXCLUSIF
hfl = CreateFile("D:\\tot.txt", GENERIC_WRITE, 0, 0,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if(hfl == INVALID_HANDLE_VALUE) return;
// on ecrit la chaine complete
d = 0; // pour verif bonne ecriture
len = strlen(szbuff);
WriteFile(hfl, szbuff, len, &d, 0);
// on ferme fichier
CloseHandle(hfl);
if(len != d) MessageErreurEcriture

ciao...
BruNews, Admin CS, MVP Visual C++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
11 mai 2004 à 19:50
Et si je veux ecrire a partir du 80ieme octet je fais comment ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 mai 2004 à 19:54
DWORD val = 255;

derriere CreateFile:
SetFilePointer(hfl, 80, 0, FILE_BEGIN);
WriteFile(hfl, &val, 1, &d, 0);
et voila un octet(255) ecrit, simple non ?

ciao...
BruNews, Admin CS, MVP Visual C++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 mai 2004 à 19:56
autre truc, change CREATE_ALWAYS pour OPEN_EXISTING si tui veux ecrire dans un fichier deja existant.

Regarde tous les flags possibles dans MSDN.

ciao...
BruNews, Admin CS, MVP Visual C++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
11 mai 2004 à 20:02
En fait ya encore un pb....
Je dispose d'un tableau de double...

ex: double Tab[2];
Tab[0] = 123456789123456 //Offset
Tab[1] = 255 //Valeur a ecrire

Voila ce dont je dispose ...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 mai 2004 à 20:10
C'est bien d'avoir un tableau de doubles, si si...
tu ne vas pas ecrire un octet depuis une representation FPU, donc mets d'abord dans un DWORD avec un cast.
Si tu n'as que des probs de ce genre tu devrais y arriver.

ciao...
BruNews, Admin CS, MVP Visual C++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
11 mai 2004 à 20:23
Dis tout de suite que j'suis nul =)

Donc si j'ai tout bien saisie je fait:

HANDLE hfl;
DWORD d, offset, val;

// j'utilise un CAST
offset = (DWORD)Tab[0];
val = (DWORD)Tab[1];

// ouverture du fichier qui existe
hfl = CreateFile("D:\\tot.txt", GENERIC_WRITE, 0, 0,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if(hfl == INVALID_HANDLE_VALUE) return;

// je place le pointeur
SetFilePointer(hfl, offset, 0, FILE_BEGIN);

d = 0; // pour verif bonne ecriture

// j'ecris la valeur MAIS pourquoi ya un & devant val ??? Je passe en parametre la valeur pas l'adresse ?!
WriteFile(hfl, &val, 1, &d, 0);

// on ferme fichier
CloseHandle(hfl);


Bon ou pas bon ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 mai 2004 à 20:34
Bien entendu WriteFile demande adresse des octets a ecrire alors on donne une adresse ou les prendre.

ciao...
BruNews, Admin CS, MVP Visual C++
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
11 mai 2004 à 20:37
Oki donc le code que j'ai mis marche ...
Tention BruNews si ca marche pas .... privé de cppfrance ;)

Bon je teste en esperant pas tout casser et je reviens dire si ca rulz ...

Tout de suite...
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
11 mai 2004 à 20:50
BruNeeeeeeeeeeeeeeeeeeeeewwwwwwwwsssssss FRIPON !!!!!
Devine quoi ?
Ca marche et du premier coup =)

*Samir offre 1 rouble a BruNews pour sa reconnaissance*

Mici canaillou :xxxxxx

Plumche

Samir

P.S : Inquietez vous pas j'aurais bientot d'autres questions :p
0
Rejoignez-nous