ark1979
Messages postés5Date d'inscriptionmardi 30 novembre 2004StatutMembreDernière intervention15 décembre 2004
-
14 déc. 2004 à 05:56
Oeil_de_taupe
Messages postés150Date d'inscriptionsamedi 31 janvier 2004StatutMembreDernière intervention16 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
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
ark1979
Messages postés5Date d'inscriptionmardi 30 novembre 2004StatutMembreDernière intervention15 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 !
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 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
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 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.
crenaud76
Messages postés4172Date d'inscriptionmercredi 30 juillet 2003StatutMembreDernière intervention 9 juin 200628 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 !!
Oeil_de_taupe
Messages postés150Date d'inscriptionsamedi 31 janvier 2004StatutMembreDernière intervention16 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...