小编cgi*_*sic的帖子

在C#中处理大量文件

我有一个4Gb文件,我想执行基于字节的查找和替换.我写了一个简单的程序来完成它,但是只需要一个查找和替换它需要太长时间(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;
    }
Run Code Online (Sandbox Code Playgroud)

顺便说一下,与4Gb"文件"相比,查找和替换相对较小.我很容易理解为什么我的算法很慢,但我不确定如何才能做得更好.

c# byte replace large-files

7
推荐指数
1
解决办法
2656
查看次数

标签 统计

byte ×1

c# ×1

large-files ×1

replace ×1