У меня есть файл размером 4 Гб, в котором я хочу выполнить поиск и замену на основе байтов. Я написал простую программу, чтобы сделать это, но это занимает слишком много времени (90 минут + ), чтобы выполнить только один поиск и замену. Несколько шестнадцатеричных редакторов, которые я пробовал, могут выполнить задачу менее чем за 3 минуты и не загружать весь целевой файл в память. Кто-нибудь знает метод, где я могу сделать то же самое? Вот мой текущий код:
public int ReplaceBytes(string File, byte[] Find, byte[] Replace)
{
var Stream = new FileStream(File, FileMode.Open, FileAccess.ReadWrite);
int FindPoint = 0;
int Results = 0;
for (long i = 0; i < Stream.Length; i++)
{
if (Find[FindPoint] == Stream.ReadByte())
{
FindPoint++;
if (FindPoint > Find.Length - 1)
{
Results++;
FindPoint = 0;
Stream.Seek(-Find.Length, SeekOrigin.Current);
Stream.Write(Replace, 0, Replace.Length);
}
}
else
{
FindPoint = 0;
}
}
Stream.Close();
return Results;
}
«Найти и заменить», кстати, относительно мал по сравнению с 4-гигабайтным «файлом». Я легко понимаю, почему мой алгоритм медленный, но я не уверен, как я мог бы сделать это лучше.