2011-06-13 3 views
1

J'utilise le code suivant pour insérer du texte dans une section arbitraire d'un fichier:Comment couper la fin d'un fichier binaire?

Dim prebuffer() As Byte 
Dim postbuffer() As Byte 

Dim number As Integer 
number = FreeFile 

Open file For Binary Access Read Write Lock Read Write As number 

ReDim prebuffer(after - 2) 
ReDim postbuffer(LOF(number) - before) 

Get number, 1, prebuffer 
Get number, before, postbuffer 

Seek number, 1 

Put number, , prebuffer 
Put number, , value 
Put number, , postbuffer 

Close number 

after et before sont récupérés languit des appels précédents à Seek(number). Lorsque after est égal à before, je veux simplement insérer des données sans en effacer. Mais quand after est inférieur à before, j'écrase des données existantes avec certaines des miennes.

Cela fonctionne très bien quand (before - after) <= Len(value), comme Windows sait augmenter ma taille de fichier pour accueillir les nouveaux octets. Cependant, lorsque j'insère moins d'octets que j'enlève, le fichier ne rétrécit pas et laisse les octets existants.

Par exemple, si mon fichier binaire est abcdefghijklmnopqrstuvwxyz et je veux insérer HELLO avec after=5 et before=15 je reçois abcdeHELLOopqrstuvwxyzvwxyz, avec vwxyz étant répétée. Comment puis-je réduire le fichier de sorte que je reçois seulement abcdeHELLOopqrstuvwxyz?


Précision: Je sais que je pourrais supprimer le fichier original et écrire de nouveau le tampon entier, mais je vise haute performance, et écrit la pièce de cette façon parce que la lecture et l'écriture l'intégralité du fichier ligne par -line était trop lent. En outre, je voudrais garder intactes les propriétés du fichier, et je ne veux pas les détruire chaque fois que j'insère un enregistrement en créant un fichier entièrement nouveau.

Répondre

Questions connexes