FindFirst/FindNext が遅い。デフラグラーのようなプログラムがこのリストをすばやく収集できるようです。使用する Windows API は?
2 に答える
あなたは「FindFirst/FindNext」が遅いと言っています。実行に関しては、_findfirst()、_findnext()、_findclose() #include <io.h> が最高に速いと思います。
非常に長いパス名が必要な場合は、Windows API バージョンを使用する必要があります。
Windows API は FindFirstFile()、FindNextFile()、および FindClose() で、ヘッダー ファイルは #include <windows.h> です。
Windows API のドキュメントには、ディレクトリ文字列の先頭に「\?\」を追加して、可能な最大パス長を取得する方法が説明されています。
C ライブラリ関数よりも多くの情報が必要な場合は、Windows API の FindFirstFileEx()、FindNextFileEx()、FindClose() を使用する必要があります。
詳細については、ドキュメントを参照する必要があります。
最も単純な C ライブラリ、_findfirst(): https://msdn.microsoft.com/en-us/library/zyzxfzac.aspx
返される詳細情報、パスの最大長、Windows API FindFirstFile(): https://msdn.microsoft.com/en-us/library/windows/desktop/aa364418(v=vs.85).aspx
返される最大情報、最大パス長、Windows API FindFirstFileEx(): https://msdn.microsoft.com/en-us/library/windows/desktop/aa364419(v=vs.85).aspx
リンクが無効になっている場合は、おそらく「C Language _findfirst()」などで検索できます。
Defragglerについてはよくわかりません。ただし、PowerShellを使用することはできます
Windows XPシステムを使用している場合は、ダウンロードしてインストールする必要があります
PowerShellを使用すると、簡単なクエリを実行できます
例えば:
$foo = Get-childItem -Path "c:\windows"
PowerShellでは、これにより、Windowsディレクトリ内のすべてのファイル名が$fooという配列に配置されます。
次に、さらに進んで配列を取得し、ファイルにパイプすることができます
$foo >> c:\temp\test.txt
出力例:
モードLastWrite時間の長さの名前 ---- ------------- ------ ---- d----2009年7月14日1:32AMWeb d----2012年5月9日3:20AMwinsxs -a---2012年2月3日午後1時1分16896AsTaskSched.dll -a---2011年4月6日12:46AM32200 atiogl.xml -a---2012年2月3日12:35PM0 ativpsrm.bin -a --- 11/20/2010 10:24 PM 71168 bfsvc.exe -a--s2012年5月24日午後10時17分67584bootstat.dat -a---2012年3月21日午後11時58分1908diagerr.xml -a---2012年3月21日午後11時58分1908diagwrn.xml -a---2012年5月4日午後6時19分28406DirectX.log
PowerShellチェックアウトの詳細については