Remplacer la séquence d'octets dans le fichier binaire
Quelle est la meilleure méthode pour remplacer la séquence d'octets dans un fichier binaire à la même longueur que les autres octets? Les fichiers binaires sera assez grand, environ 50 mo et ne doivent pas être chargés à la fois dans la mémoire.
Mise à jour: je ne sais pas l'emplacement d'octets qui doit être remplacé, j'ai besoin de trouver d'abord.
source d'informationauteur Tomas
Vous devez vous connecter pour publier un commentaire.
En supposant que vous êtes en train de remplacer un connu section du fichier.
FileStream
avec accès en lecture/écritureExemple de code à venir...
Si vous êtes effectivement essayer de faire une version binaire d'un
string.Replace
(par exemple, "toujours remplacer octets { 51, 20, 34} avec { 20, 35, 15 }, puis il est plutôt difficile. Une description rapide de ce que vous devriez faire:stream.Position -= buffer.Length - indexWithinBuffer;
et écraser les donnéesSemble simple pour l'instant... mais le problème est que si les données commence près de la fin de la mémoire tampon. Vous avez besoin de se rappeler de tous potentiel matches et dans quelle mesure vous avez égalé jusqu'à présent, de sorte que si vous obtenez un match quand vous lisez les prochaine tampon de la valeur, vous pouvez le détecter.
Il y a probablement des moyens d'éviter ce trickiness, mais je ne voudrais pas essayer de venir avec eux désinvolte 🙂
EDIT: Bon, j'ai une idée qui pourrait aider...
De cette façon à un certain point, si les données sont présentes, il sera complètement à l'intérieur de la mémoire tampon.
Vous devez être prudent sur l'endroit où le courant était dans le but de revenir à la bonne place, mais je pense que cela devrait fonctionner. Il serait plus difficile si vous essayez de trouver tous matchs, mais au moins, le premier match devrait être assez simple...
Ma solution :
Vous pouvez utiliser mon BinaryUtility de rechercher et de remplacer un ou plusieurs octets sans charger tout le fichier en mémoire comme ceci:
BinaryUtility code: