cgi*_*sic 7 c# byte replace large-files
我有一个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"文件"相比,查找和替换相对较小.我很容易理解为什么我的算法很慢,但我不确定如何才能做得更好.