Удалить или пропустить ненужные байты - 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);
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы