2009-10-16 8 views
3

Je souhaite supprimer un caractère/une chaîne d'un fichier binaire/texte. Si je connais la position du caractère/chaîne du fichier, comment puis-je le supprimer? Dois-je lire le fichier (BlockRead), supprimer le char/string (avec Delete (source, startPos, endPos) puis écrire (BlockWrite) dans un nouveau fichier ou je peux supprimer directement du fichier spécifié?Supprimer le caractère du fichier binaire

merci

+0

Il serait probablement plus facile d'utiliser un TFileStream que BlockRead/BlockWrite –

Répondre

12

Vous pouvez utiliser la méthode TFileStream.CopyFrom pour copier avant les stri indésirables ng, recherchez-le passé, puis CopyFrom à nouveau le reste du fichier. TFileStreams sont assez rapides.

Quelque chose comme ça (non testé)

aInFile := TFileStream.Create(sInput, fmOpenRead); 
try 
    aOutFile := TFileStream.Create(sOutput, fmCreate); 
    try 
    aOutFile.CopyFrom(aInFile, Pos); 
    aInFile.Seek(Skip); 
    aOutFile.CopyFrom(aInFile, aInfile.Size - Pos - Skip); 
    finally 
    aOutFile.Free; 
    end; 
finally 
    aInFile.Free; 
end; 
1

vous avez probablement besoin de lire et d'écrire le fichier entier, ou au moins tous les octets après le point à partir duquel vous supprimez le caractère

Il est parfois préférable de trouver un moyen d'éviter de supprimer le caractère. - c'est-à-dire des espaces vides dans le fichier

Questions connexes