Обработка больших файлов на C#

У меня есть файл размером 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-гигабайтным «файлом». Я легко понимаю, почему мой алгоритм медленный, но я не уверен, как я мог бы сделать это лучше.

7
задан cgimusic 30 April 2012 в 17:17
поделиться