【解決方法】ディレクトリ内のファイルを列挙する (WIN32 API を使用)

プログラミングQA


こんにちは皆さん。
必要なディレクトリを選択するときに、Win32 でファイルリストを構築するための効率的なコードを見つけたいと思っています/
すべてのサブディレクトリを調べてすべてのファイルを抽出したいと思います(再帰関数を意味します)
誰かがそのような課題に直面していて、私に解決策を提供してくれるかもしれないと思います。

事前に。

解決策 1

これは Windows API を使用して実行できます FindFirstFile (FindFirstFileEx)/ FindNextFile / FindClose。 参照してください:

[^]。

[EDIT: answering a follow-up question]

これらの関数は、現在のディレクトリ内のすべてのファイル システム オブジェクト (ファイルとディレクトリの両方) を検索することに注意してください。 構造に注意してください _WIN32_FIND_DATA フィールドを持っています dwFileAttributes、フィールドの値は次のとおりです。 FILE_ATTRIBUTE_… 定数であり、属性の 1 つは次のとおりです。 FILE_ATTRIBUTE_DIRECTORY。 このビットがフィールドに設定されているかどうかをテストできます dwFileAttributes 見つかった項目ごとに検索し、これがディレクトリの場合は、その中のファイルを再帰的に検索します。

参照してください:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365740%28v=vs.85%29.aspx[^]、

[^]。

もう明らかですか?

この情報は自分で簡単に見つけることができます。

-SA

解決策 4

パブリック クラス clsWindowsTools

コレクションとしてのパブリック関数 GetRecursiveFileCollection(ByVal strPath)

新しいコレクションとして cFolders を薄暗くする
GetSubFolders(strPath, cFolders)

新しいコレクションとしての Dim cFiles
cFolders の文字列としての strFolder ごとに
GetFilesFromFolder(strFolder, cFiles)

cFileを返す

終了関数

コレクションとしてのパブリック関数 GetRecursiveFolderCollection(ByVal strPath)

新しいコレクションとして cFolders を薄暗くする
GetSubFolders(strPath, cFolders)

cFoldersを返す

終了関数

Private Sub GetSubFolders(strFolder As String, ByRef cRecursiveFolderCollection As Collection)
Dim strFolders() As String = IO.Directory.GetDirectories(strFolder)
cRecursiveFolderCollection.Add(strFolder)
各 strloopFolder の strFolders の文字列として
GetSubFolders(strloopFolder, cRecursiveFolderCollection)

エンドサブ

Private Sub GetFilesFromFolder(strFolder を文字列として、cFiles をコレクションとして)
Dim files() As String = IO.Directory.GetFiles(strFolder)
ファイル内の文字列としての strFile ごと
cFiles.Add(strFile)

エンドサブ
終了クラス

コメント

タイトルとURLをコピーしました