pmi*_*ilb 6 c windows filesystems winapi
最终,我想浏览一个文件夹的文件和子目录,并将一些内容写入我发现具有特定扩展名的所有文件(在我的情况下为.wav).在循环时如何判断我所在的项目是否是目录?
这是你如何做到的(这是从内存中所有可能有错误):
void FindFilesRecursively(LPCTSTR lpFolder, LPCTSTR lpFilePattern)
{
TCHAR szFullPattern[MAX_PATH];
WIN32_FIND_DATA FindFileData;
HANDLE hFindFile;
// first we are going to process any subdirectories
PathCombine(szFullPattern, lpFolder, _T("*"));
hFindFile = FindFirstFile(szFullPattern, &FindFileData);
if(hFindFile != INVALID_HANDLE_VALUE)
{
do
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
// found a subdirectory; recurse into it
PathCombine(szFullPattern, lpFolder, FindFileData.cFileName);
FindFilesRecursively(szFullPattern, lpFilePattern);
}
} while(FindNextFile(hFindFile, &FindFileData));
FindClose(hFindFile);
}
// Now we are going to look for the matching files
PathCombine(szFullPattern, lpFolder, lpFilePattern);
hFindFile = FindFirstFile(szFullPattern, &FindFileData);
if(hFindFile != INVALID_HANDLE_VALUE)
{
do
{
if(!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
// found a file; do something with it
PathCombine(szFullPattern, lpFolder, FindFileData.cFileName);
_tprintf_s(_T("%s\n"), szFullPattern);
}
} while(FindNextFile(hFindFile, &FindFileData));
FindClose(hFindFile);
}
}
Run Code Online (Sandbox Code Playgroud)
所以你可以称之为
FindFilesRecursively(_T("C:\\WINDOWS"), _T("*.wav"));
Run Code Online (Sandbox Code Playgroud)
在C:\ WINDOWS及其子目录中查找所有*.wav文件.
从技术上讲,您不必执行两个FindFirstFile()调用,但我发现Microsoft提供的模式匹配函数(即PathMatchFileSpec或其他)不如FindFirstFile().虽然对于"*.wav",它可能会很好.
opendir 和 readdir (在 unix 上),这是一个示例:
http://opengroup.org/onlinepubs/007908775/xsh/readdir.html
或 Windows 上的 FindFirstFile
你也可以很容易地使用 shell:
find . -name "*.wav"
or
ls **/*.wav (in zsh and newer bashes)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16558 次 |
| 最近记录: |