C++ で FAT32 ディスク (ファイル パスとファイル名が必要なだけ) をできるだけ早くスキャンしたいのですが、FAT32 ディスク上のすべてのファイルをスキャンします。これを行うための API はありますか?
2 に答える
このスレッドを確認してください: Win32 でディレクトリをすばやく列挙するにはどうすればよいですか?
実際には FindFirstFile/FindNextFile について説明していますが、より高速に必要な場合は Kernel に移動する必要があります。
ただし、スレッドで説明されているインデックス ソリューションは FAT32 システムでは機能しません -クレジット MSalters
「スキャン」という用語はあまり明確に定義されていません。すべてのファイルのすべてのバイトを読み取りますか? 最も簡単な方法は、ディレクトリ リストを使用することです。ルートディレクトリをプッシュすることから始めます。次に、ディレクトリ リストが空でない限り、 を呼び出しFindFirstFile/FindNextFile
てすべてのファイルとサブディレクトリを列挙します。サブディレクトリをディレクトリ リストに追加し、見つかったファイルを読み取ります。
更新:あなたの目的にFindFirstFileEx(FindExInfoBasic)
は十分です。サブディレクトリが表示されたらすぐに入力する (深さ優先) のではなく、一度に 1 つのディレクトリのみを処理する (幅優先) ことをお勧めします。これは、1 つのディレクトリ内の FAT32 ディレクトリ エントリが一緒に格納されるため高速ですが、サブディレクトリは通常、親ディレクトリに隣接して格納されません。