在VC环境下怎样遍历文件夹中的文件

在VC环境下怎样遍历文件夹中的文件,第1张

在做图像处理中通常要对图像文件连续读取,因此需要遍历整个文件夹中的文件。不要着急在IO.H、WCHAR.H中提供了_finddata_t, _wfinddata_t, _wfinddatai64_t 结构,通过_findfirst可以得到满足条件的第一个文件的句柄,如下:long_findfirst(char*filespec,struct_finddata_t*fileinfo),然后你可以使用_findnext函数得到用_findfirst的句柄后的文件指针,如此就可以遍历所有满足条件的文件。long hFileif( (hFile = _findfirst( LPCTSTR(pathWild), &c_file )) == -1L ){::AfxMessageBox("No image files in current directory!/n" ) }else{do { AfxGetMainWnd()->SetWindowText(c_file.name)} while (_findnext(hFile, &c_file) == 0)}_findclose(hFile)对了,别忘了在你的工程中包括头文件IO.H

int count_file(char *dir)

{

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

}

//结合网上资料写出的,作者--杨克群^_^


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11844747.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存