当前位置: 技术问答>linux和unix
c 语言怎样获取一个文件夹下的所有文件名和文件?
来源: 互联网 发布时间:2016-10-14
本文导语: c 语言怎样获取一个文件夹下的所有文件名和文件? 然后递归打开每一个文件名,如果是文件夹,就继续向下打开,继续获取文件夹和文件名。。 | #include #include #define FILEILTER "*.*" BOOL IsRoot(LPCTSTR lpszPath)...
c 语言怎样获取一个文件夹下的所有文件名和文件?
然后递归打开每一个文件名,如果是文件夹,就继续向下打开,继续获取文件夹和文件名。。
然后递归打开每一个文件名,如果是文件夹,就继续向下打开,继续获取文件夹和文件名。。
|
#include
#include
#define FILEILTER "*.*"
BOOL IsRoot(LPCTSTR lpszPath)
{
TCHAR szRoot[4];
wsprintf(szRoot, "%c:\", lpszPath[0]);
return (lstrcmp(szRoot, lpszPath) == 0);
}
void FindInAll(LPCTSTR lpszPath)
{
TCHAR szFind[MAX_PATH];
lstrcpy(szFind, lpszPath);
if (!IsRoot(szFind))
lstrcat(szFind, "\");
lstrcat(szFind, FILEILTER); // 找所有文件
WIN32_FIND_DATA wfd;
HANDLE hFind = FindFirstFile(szFind, &wfd);
if (hFind == INVALID_HANDLE_VALUE) // 如果没有找到或查找失败
return;
do
{
if (wfd.cFileName[0] == '.')
continue; // 过滤这两个目录
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
TCHAR szFile[MAX_PATH];
if (IsRoot(lpszPath))
wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);
else
{
wsprintf(szFile, "%s\%s", lpszPath, wfd.cFileName);
FindInAll(szFile); // 如果找到的是目录,则进入此目录进行递归
}
}
else
{
TCHAR szFile[MAX_PATH];
if (IsRoot(lpszPath))
{
wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);
}
else
{
wsprintf(szFile, "%s\%s", lpszPath, wfd.cFileName);
printf("%sn",szFile);
}
// 对文件进行操作
}
} while (FindNextFile(hFind, &wfd));
FindClose(hFind); // 关闭查找句柄
}
int main(int argc, char* argv[])
{
char findFile[64]="d:";//要查找的目录
FindInAll(findFile);
getchar();
return 0;
}
|
基本上需要操作系统的支持或者说至少不同操作系统实现肯定不同,
单纯的c库api不可能实现的
比如楼上的代码不能拿到linux:)
单纯的c库api不可能实现的
比如楼上的代码不能拿到linux:)
|
对文件夹处理确实要加递归的。。。
|
mark
MFC我做过的,C语言不知道呢~关注!!
MFC我做过的,C语言不知道呢~关注!!
|
ls应该加一个递归,如果是文件夹的