{
struct _finddata_t p//定义一个结构体存放文件属性
int n,n1
char *a
n=strlen(dir)a=new char [n+100]n1=0
strcpy(a,dir)strcat(a,"\\*.*")
if((n=_findfirst(a,&p))!=-1L)//调用文件查找函数
{
if(strcmp(p.name,".")&&strcmp(p.name,".."))
{
if((p.attrib&_A_SUBDIR))//文件是否为文件夹
{
int n2=strlen(dir)+strlen(p.name)
char *b=new char [n2+10]strcpy(b,dir)
strcat(b,"\\")strcat(b,p.name)
n1+=count_file(b)//递归调用 作用是返回文件夹内的文件总数
n1++
delete(b)
}
}
while(_findnext(n,&p)==0)//寻找下一个文件
{
if(strcmp(p.name,".")&&strcmp(p.name,".."))
{
if((p.attrib&_A_SUBDIR))
{
int n2=strlen(dir)+strlen(p.name)
char *b=new char [n2+10]strcpy(b,dir)
strcat(b,"\\")strcat(b,p.name)
n1+=count_file(b)delete(b)n1++
}
else n1++
}
}
_findclose(n)//结束寻找
}
delete(a)return n1//返回文件总个数
}
#include "stdafx.h"#include <windows.h>
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, "*.*")// 找所有文件
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("%s\n",szFile)
// 对文件进行 *** 作
}
} while (FindNextFile(hFind, &wfd))
FindClose(hFind)// 关闭查找句柄
}
int main(int argc, char* argv[])
{
FindInAll("e:\\result")
return 0
}
//结合网上资料写出的,作者--杨克群^_^
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)