在VC环境下遍历文件夹中的文件:两种方法

 在做图像处理中通常要对图像文件连续读取,因此需要遍历整个文件夹中的文件。在VC环境下CFileDialog是不能得到所有文件信息,如果要遍历文件夹内所有文件,应该怎样办呢?不要着急在IO.H、WCHAR.H中提供了 _finddata_t, _wfinddata_t, _wfinddatai64_t 结构,通过_findfirst可以得到满足条件的第一个文件的句柄,如下:
long _findfirst( char *filespec, struct _finddata_t *fileinfo),然后你可以使用_findnext函数得到用_findfirst的句柄后的文件指针,如此就可以遍历所有满足条件的文件。其中_finddata_t 结构包括了文件的相关信息:文件名,创建日前等属性,你可以从你的机器中的IO.H文件中查找相应的定义。当然不要忘了,使用_findclose 函数关闭相应句柄 例如:下面程序实现把文件夹中的文件名字显示在窗口的标题栏中。
CString pathWild ="你的目录// *.jpg " ;
 struct _finddata_t c_file;
 long hFile;
 
 if( (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
 

2.利用CFileFind类较简洁的实现该功能

void CModelDlg::FindBmpFile(CString strFoldername)

{

CString m_cstrFileList=”";

CFileFind tempFind;

BOOL bFound; //判断是否成功找到文件

bFound=tempFind.FindFile(strFoldername + “\\*.*”); /修改” “内内容给限定查找文件类型

CString strTmp; //如果找到的是文件夹 存放文件夹路径

while(bFound) //遍历所有文件

{

bFound=tempFind.FindNextFile(); //第一次执行FindNextFile是选择到第一个文件,以后执行为选择

//到下一个文件

if(tempFind.IsDots()) continue; //如果找到的是返回上层的目录 则结束本次查找。每个目录下都有缺省的两个目录,名称分别为 '. '和 '.. ',分别代表上一层目录和本层目录。

if(tempFind.IsDirectory()) //找到的是文件夹,则遍历该文件夹下的文件

{

strTmp=”";

strTmp=tempFind.GetFilePath();

FindFile(strTmp);

}

else

{

strTmp=tempFind.GetFileName(); //保存文件名,包括后缀名

// 在此处添加对找到文件的处理

}

}

tempFind.Close();

return;

}

其他CFileFind类成员函数请参见MSDN

Related posts:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值