ファイルのCRC32/md5 / sha1 / sha256 / sha384 / sha512を計算するために使用する単純なアプリケーションを設計しようとしていますが、少し障害が発生しました。これはC#で行われています。
これをできるだけ効率的に実行できるようにしたいので、当初はファイルをメモリストリームに読み込んでから処理することを考えていましたが、ファイルが非常に大きいと、メモリがすぐに不足することがすぐにわかりました。したがって、代わりにファイルストリームを使用する必要があるように思われます。問題は、私が見ているように、一度に実行できるハッシュ関数は1つだけであり、ファイルストリームを使用して実行すると、各ハッシュが完了するまでに時間がかかることです。
ファイルの小さなビットをメモリに読み込み、6つのアルゴリズムすべてで処理してから、別のチャンクに移動するにはどうすればよいですか...または、ハッシュはそのように機能しませんか?
これは、ファイルをメモリに読み込む最初の試みでした。メモリストリームでハッシュアルゴリズムを実行する前にCDイメージをメモリに読み込もうとすると、失敗しました。
private void ReadToEndOfFile(string filename)
{
if (File.Exists(filename))
{
FileInfo fi = new FileInfo(filename);
FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[16 * 1024];
//double step = Math.Floor((double)fi.Length / (double)100);
this.toolStripStatusLabel1.Text = "Reading File...";
this.toolStripProgressBar1.Maximum = (int)(fs.Length / buffer.Length);
this.toolStripProgressBar1.Value = 0;
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = fs.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
this.toolStripProgressBar1.Value += 1;
}
_ms = ms;
}
}
}