バイトベースの検索と置換を実行する4Gbファイルがあります。私はそれを行うためのシンプルなプログラムを書いていますが、1回だけ検索して置き換えるには時間がかかりすぎます(90分以上)。私が試したいくつかのヘキサエディタは、3分以内にタスクを実行することができ、ターゲットファイル全体をメモリにロードしません。誰も私が同じことを達成できる方法を知っていますか?ここに私の現在のコードは次のとおりです。C#で巨大ファイルを処理する
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;
}
検索と置換は途中で4Gb "ファイル"と比較して比較的小さいです。なぜ私のアルゴリズムが遅いのかを簡単に知ることができますが、どのようにしてよりうまくいくのか分かりません。
まず、一度に1バイト以上を読み取ります。 – SLaks
http://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm – SLaks