CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[c] écriture de fichier 'en place'

dnob700
dnob700
Niveau 10
17 octobre 2005 à 22:18:17

C´est similaire à un autre problème qu´on a vu passer sur le forum mais là j´aimerais savoir s´il y a moyen en C ANSI ou tout au moins avec un truc portable de faire ce que je veux :

j´ai un fichier binaire qui contient certaines info. Parfois j´ai besoin d´en modifier. Je connait exactement l´offset où je doit écrire les nouvelles info, mais le problème c´est qu´avec fopen on ne peut pas écrire par dessus un fichier existant déjà sans effacer toutes les données qu´il contient, ce qui ne m´arrange pas car le fichier est assez gros, donc ça m´ennuierais de le réécrire entièrement.

Avec win32 je serais le faire mais ce n´est pas portable. Ou avec iostream ça doit probablement aussi ce faire, mais je déteste lié un programme de 50ko avec une bibliothèque de 150ko si je peut l´éviter.

Voila, si quelqu´un sait comment faire, ou au contraire sait qu´on ne peut pas le faire merci d´avance.

c64
c64
Niveau 10
17 octobre 2005 à 22:19:18

C´est possible avec fseek(). Tu ouvres ton fichier en append, en connaissant ton offset depuis le début du fichier tu fais fseek(ptr,num_offset,SEEK_START) pour placer le curseur au bon endroit. Effectue ton écriture et vois ce que ça donne.

Ce n´est là qu´une piste (le C ANSI je pratique plus..) et il se peut qu´il faille faire autre chose.

Artatum
Artatum
Niveau 10
18 octobre 2005 à 02:39:36

salut,
c´est possible à condition d´utiliser exactement le même nombre de bits que ce que tu remplaces:
tu ouvre en rb+, tu positionnes avec fseek & tu écris.

dnob700
dnob700
Niveau 10
18 octobre 2005 à 17:09:44

merci.
Ca marche come sur des roulettes.

Artatum
Artatum
Niveau 10
18 octobre 2005 à 21:23:11

mais perso je fais jamais ça, j´ai trop peur d´une erreur d´écriture et d´un foirage définitif de mon fichier binaire:
je fais une copie de mon "fichier1" ->"fichierdate"
j´ouvre mon "fichier1" en r, un "temp" en w, je recopie fichier1 dans temp jusqu´à l´info à remplacer, jécris l´info à remplacer, je recopie la suite du "fichier1" dans "temp".
à la fin, je ferme tout, j´efface "fichier1" (remove) et je renomme "temp" en "fichier1" (rename). C´est plus long mais je suis plus tranquille, et j´ai une liste de "fichier2date" de récupération en cas de problème.

dnob700
dnob700
Niveau 10
18 octobre 2005 à 21:28:47

bien sur, mais quand c´est un fichier de 80Mo et que je doit modifier moins d´une vingtaine d´octets à la fois, mais très souvent ça me semble beaucoup de travail.

De toute manière ce n´est pas un fichier très important et les fonctions d´écriture doivent être assez sûr.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment