Ecrire au millieu d'un fichier

Résolu
ark1979 Messages postés 5 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 15 décembre 2004 - 14 déc. 2004 à 05:56
Oeil_de_taupe Messages postés 150 Date d'inscription samedi 31 janvier 2004 Statut Membre Dernière intervention 16 février 2009 - 23 août 2006 à 22:32
Bonjour tout le monde,

Quelqu'un saurait t'il comment écrire au à l'intérieur d'un fichier mais en ajoutant une partie à l'intérieur du fichier existant ?

Exemple :

Fichier original :
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Fichier modifié :
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyy
yyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Mais ceci sans réécrire de fichier (imaginez un fichier
de 600 Mo) la méthode de réécriture ne convient pas.

En fait, il faudrait pouvoir se placer dans le fichier
(à un offset désiré du fichier) et écrire une nouvelle
partie .. ceci aurait pour conséquence de déplacer le reste

Une sorte d'insertion quoi ...

Bon voilà, j'espère que solution il y a .. De toute manière,
je continue de chercher par moi-même, et si je trouve, je posterais la soluce ici ... Mais un pitit coup de main serait
le bienvenue

Merci de votre aide
:big)

8 réponses

ark1979 Messages postés 5 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 15 décembre 2004
15 déc. 2004 à 04:15
Merci pour vos infos, mais j'avais déjà envisagé toute vos solutions mais loin d'etre satisfaisante sur de gros fichiers.

J'ai par contre trouvé solution rapide avec "CreateFileMapping"
En mappant le fichier j'evite la lourde procédure de lecture réécriture

Je n'ai pas encore mené jusqu'au bout cette méthode mais ca a l'air de bien fonctionner. En effet entre la MSDN et les tuts sur le net sur les API de FileMapping, les exemples donnés m'ont ouvert la voie !

Merci a bientot.
3
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
14 déc. 2004 à 08:37
Pas d'autre choix que de lire puis de réécrire le fichier ! Du moins, je n'en connais aucune !!

Christophe R.
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
14 déc. 2004 à 10:59
et pourtant il y a une solution avec:

CreateFile 'ouvrir le fichier
SetFilePointer 'positionner le pointeur de fichier
WriteFile 'écrire à l'endroit du pointeur
SetEndOfFile 'positionner la fin de fichier
CloseHandle 'fermer fichier

Daniel
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
14 déc. 2004 à 11:44
Avec le WriteFile tu fait une insertion ?

Christophe R.
0

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

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
14 déc. 2004 à 11:50
non exact ça va effacer ce qui se trouve à la position du pointeur.
ça oblige à lire le reste du fichier pour le récrire après.
mais on gagne quand même toute la lecture et réécriture du début.

Daniel
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
14 déc. 2004 à 12:29
Exact ! Mais il va falloir lire la fin du fichier, sotcker cela dans une variable, puis ecrire l'ajout, puis réécrire la fin. Le stockage risque de couter cher en mémoire, donc en temps de traitement si le fichier fait 600Mo et que l'instertion doit se faire en début de fichier !!! Il est alors peut-être plus efficace de directement faire une réécriture en fichier temporaire !!

Christophe R.
0
v.massip Messages postés 48 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 9 décembre 2008 2
6 janv. 2005 à 13:15
Ta solution m'intéresse! Pourrais-tu m'en dire plus STP?!
0
Oeil_de_taupe Messages postés 150 Date d'inscription samedi 31 janvier 2004 Statut Membre Dernière intervention 16 février 2009
23 août 2006 à 22:32
>J'ai par contre trouvé solution rapide avec "CreateFileMapping"
>En mappant le fichier j'evite la lourde procédure de lecture réécriture

Si j'ai bien compris tu utilise ouvre le fichier tu utilises CreateFileMapping puis tu l'utilises comme un fichier tous simple (WriteFile & ReadeFile).
Mais es-ce que cette solution est vraiment plus rapide si tu parcours le fichier de A à Z (tu lis toutes les données)? Parce que ce que tu fais c'est que tu mappes le fichier en mémoire et pour les gros fichiers ça prends aussi beaucoup de temps (question d'accès disque)....

Il y a un bon article accessible ici fait par Microsoft (en anglais). Il parle des avantages de cette technique (la tienne).Parmi les avantages cités il y a:

<ol><li>Rapidité accrue parce que Windows va chercher que les données voulue ( , idem que une simple lecture de fichier)
</li><li>Le gestionnaire de mémoire virtuelle (qui gère le mappage de fichier) choisi lui-même les données retirées du fichier qu'il faut garder et celle qu'il faut enlever de la mémoire (c'est un avanatage pour les grands fichiers selon eux) mais tu peux aussi le faire toi-même et jeter les données dont tu as pas besoin
</li></ol>
Mais bon, je ne vois pas d'avantage par rapport à une simple lecture du fichier.... Si quelqu'un vois...

La taupe voit toujours tout (sauf les bugs)
0
Rejoignez-nous