我想创建一个循环遍历给定文件夹(在大多数情况下为 C:)的 C++ 项目,并提供名称和/或任何给定属性的列表。我使用 FindFirstFile() 进行了成功循环,但是在第一次递归之后,我不可避免地进入了一个循环,其中我的路径变为 C:\$GetCurrent..... 直到 strcpy 放弃。代码是
// LoopFiles.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <ShellAPI.h>
#include <fstream>
#include <strsafe.h>
void FindAllFiles(LPCSTR path);
int main()
{
FindAllFiles("C:");
return 0;
}
void FindAllFiles(LPCSTR path) {
LPWIN32_FIND_DATAA data = new WIN32_FIND_DATAA();
char searchPath[MAX_PATH] = "";
HANDLE hFind = INVALID_HANDLE_VALUE;
strcpy_s(searchPath, path);
strcat_s(searchPath, "\\*");
hFind = FindFirstFileA(searchPath, data);
do {
if (INVALID_HANDLE_VALUE == hFind)
{
continue;
}
if (data->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
strcpy_s(searchPath, path);
strcat_s(searchPath, "\\");
strcat_s(searchPath, data->cFileName);
FindAllFiles(searchPath);
}
else {
std::cout << data->cFileName;
}
} while (FindNextFileA(hFind, data));
}
显然,这段代码在 Windows 上运行。我能做些什么来防止这个错误发生?
排除名称为“.”的目录 (当前目录)和“..”(父目录)从搜索,可能的解决方案:
if( data->cFileName[0] == '.' and ( data->cFileName[1] == 0 or
( data->cFileName[1] == '.' and data->cFileName[2] == 0 ) ) )
continue;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句