Salut, je voudrais savoir comment modifier des octets au milieu d'un fichier, jusqu'ici je recopier tout le fichier en changeant les octet voulu mais ca me pose probleme pour de gros fichier.
Merci!
Dans cet exemple, le pointeur du fichier est positionné à 1000 à partir du début. Puis on écrit l'octet 0x1F à cette position. L'ancien octect est écrasé. Si la taille du fichier est trop grande (+ de 4Go) tu devras utiliser aussi le 3ème paramètre de la fonction SetFilePointer(). Si la position désirée est plus proche de la fin, il est préférable de remplacer FILE_BEGIN par FILE_END. Dans ce cas "position" doit être négatif.
Salut,
Nebula > Tu es sûr que les fonctions du C Standard sont plus rapides? Si oui comment expliquer cela? Moi je pensais toujours que les APIs sont les plus rapides. J'aimerais bien en avoir le coeur net.
BruNews > Ok. Je ne sais pas pourquoi beaucoup de gens pensent que les fonctions du C Standard sont toujours plus rapides. Y'a-t-il des cas où cela pourrait être vrai?
Eventuellement pour des fonction C qui n'utilisent pas d'API!
Par exemple sprintf est peut être plus rapide que wsprintf, par contre malloc qui utilisse HeapAlloc ne pourrait être plus rapide, elle est forcément plus lente
Et bonjour le gain de vitesse... >> modifier des octets sans avoir à se taper la copie du fichier pour changer trois octets à la fin, API ou CRT c'est déjà une bonne optimisation non (sans commentaires)
Si tu utilises le C standard : fopen, fseek, fprintf et fclose. >> au cas où il serait pas sous Windows, évidemment API sinon !
Nebula > Voilà, maintenant c'est plus clair, je suis tout à fait d'accord. Si tu avais bien séparé le commentaire du conseil, il n'y aurait pas de fausse interprétation... :)
Et s'il avait donné le système, je n'aurais rien précisé. On tourne en rond ;-)
Par ailleurs je ne vois pas où j'ai été "imprécis", BruNews a d'ailleurs bien compris le sens de mes propos. Çà dépend plus de la manière dont on interprète la jonction entre les phrases :-/
Enfin, la prochaine fois je mettrais "au cas où" plutôt que "si", çà prêtera moins à confusion...
Voila ce que j'ai fait pour copier un fichier (je sais que ce n'est pas du tout la bonne methode pour le faire mais je voudrais savoir pourquoi ca ne marche pas car j'ai besoin de pouvoir pointer ou je veux dans le fichier en lecture comme en écriture):
Les APIs de base du systeme (pas GDI+ et autres trucs de haut niveau) sont toutes "ecrites" en C pour assurer une maintenance aisee, beaucoup d'entre elles (GDI par exemple) repassent quasi illico les operations a des routines entierement en ASM.
Rassurons vecchio: jamais vu la moindre API ecrite en VB (on plaisante...).
supergrey> Il y a un truc que tu n'as pas bien compris apparement.
SetFilePointer permet de déplacer un pointeur sur un flux.
Seuleument, quand tu lis ou écrit dans un fichier qui reste ouvert, le déplacement du pointeur est automatique, et se met au dernier octet écrit ou lus.
C'est pourquoi BruNews te dis que les 2 SetFilePointer de ta boucle son inutile.
Puis si tu souhaites copier de gros fichier, ne le fait pas octet par octet, sinon t'en auras pour une plombe.
Fait une copie par bloc d'octet.