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.
Tout ce qu'il donne * moi * est une erreur 503 ... – dlras2
Huh, travaille maintenant. En attendant, j'ai trouvé cette API sur Google - merci, ça fonctionne -, mais il est regrettable que je doive recourir aux appels d'API pour ça. – dlras2