CreateFile

Signaler
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
-
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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?
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
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
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
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++
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Et si je veux ecrire a partir du 80ieme octet je fais comment ?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
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++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
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++
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
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 ...
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
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++
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
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 ?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Bien entendu WriteFile demande adresse des octets a ecrire alors on donne une adresse ou les prendre.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
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...
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
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