Удалить или пропустить ненужные байты - C#
Формулировка задачи:
необходимо удалить из файла определенные байты (например, 0х20 0х7A 0хB3).
подскажите пожалуйста как лучше это сделать? загнать файл в массив байт и потом записать этот массив в новый файл, пропуская ненужные байты? как это реализовать?
причем данная комбинация ненужных байт встречается в файле не один, а несколько раз
Решение задачи: «Удалить или пропустить ненужные байты»
textual
Листинг программы
const int BUFFER_SIZE = 100;
var seq = new[] { 0x20, 0x7A, 0xB3 };
using (var sourceStream = new FileStream(@"path to file", FileMode.Open, FileAccess.Read))
using (var resultStream = new FileStream(@"path to file", FileMode.Create, FileAccess.Write))
{
var bytes = new byte[BUFFER_SIZE];
var result = new byte[2 * BUFFER_SIZE];
var temp = new List<byte>();
var resultCount = 0;
while (true)
{
int count = sourceStream.Read(bytes, 0, bytes.Length);
if (count == 0) break;
resultCount = 0;
for (var i = 0; i < count; i++)
{
if (bytes[i] == seq[temp.Count])
{
temp.Add(bytes[i]);
if (temp.Count == seq.Length)
{
temp.Clear();
}
}
else
{
foreach (byte value in temp)
{
result[resultCount++] = value;
}
temp.Clear();
result[resultCount++] = bytes[i];
}
}
resultStream.Write(result, 0, resultCount);
}
if (temp.Count > 0)
{
resultCount = 0;
foreach (byte value in temp)
{
result[resultCount++] = value;
}
resultStream.Write(result, 0, resultCount);
}
}