0

ディスク上にサイズが 20 GB の大きなプレーン テキスト ファイルがあります。このファイルに「MyFile.txt」という名前を付けましょう。このファイルには、英語の単語と「+++」の値を持つ 1 つの文字列のみが含まれています。この文字列に FlagString という名前を付けましょう。MyFile.txt の先頭から FlagString まで、正しい英単語があります。ファイルのこのセクションをディクショナリと呼びましょう。ただし、FlagString の後の最初の単語から MyFile.txt の最後まで、単語にスペルミスがある可能性があります。ファイルのこのセクションを CheckedSection と呼びましょう。チェックされたセクションから各単語を読み取り、この単語のスペルを検証して、何らかのアルゴリズムに従って辞書内の適切な単語と比較する必要があります。MyFile.txt が大きい場合は、CreateFileMapping 関数と MapViewOfFile 関数を使用してファイルをメモリにマップします。私の問題は次のとおりです。

  1. MyFile.txt は大きいので、断片的にメモリにマップしたいと考えています。各フラグメントのサイズを 1GB とします。CreateFileMapping を使用してメモリ内の断片的なファイルをマップする方法を教えてください。
  2. メモリへのフラグメント ファイル マッピングを使用する場合、FlagString を Dictionary と CheckedSection の間の区切り文字として識別するにはどうすればよいですか。MyFile.txt の FlagString は、1GB セクションの境界では必須ではありませんが、1GB セクションの内側にある場合があります。ファイルがメモリにマップされた後、ファイル内の位置をマークするために使用するファイル カーソルはありますか?
  3. MyFile.txt から 2 つのメモリ マッピングを作成できますか? Dictionary の 1 つのマッピングと CheckedSection の別のマッピング。
  4. Dictionary または CheckedSection の現在の 1 GB セクションの処理が終了するたびに、UnmapViewOfFile と CloseHandle を呼び出す必要がありますか?
4

0 に答える 0