MFC中怎样实现循环读取一系列图像呢?


文件名的前缀都一样,后缀是连续的数字,如果想循环读取的话,是不是对文件名进行设置循环呢?大概怎么实现,,,有知道的能不能告诉一声?

8 个解决方案

#1


用遍历文件的方法 FindFirstFile  FindNextFile

#include<windows.h>
#include<iostream>
#include<string>
using namespace std;
//只能处理目录:lpPath只能是路径
 

 

find(char * lpPath)
{
  char szFind[MAX_PATH];
  WIN32_FIND_DATA FindFileData;
  strcpy(szFind,lpPath);
  strcat(szFind,"*.*");
  HANDLE hFind=::FindFirstFile(szFind,&FindFileData);
  if(INVALID_HANDLE_VALUE == hFind)  return;
  while(TRUE)
  {
if(FindFileData.dwFileAttributes

&FILE_ATTRIBUTE_DIRECTORY)
    {
      if(FindFileData.cFileName[0]!='.')
      {
        strcpy(szFile,lpPath);
        strcat(szFile,"");
        strcat(szFile,FindFileData.cFileName);
        find(szFile);
      }
    }
    else
    {
      cout << FindFileData.cFileName;
    }
    if(!FindNextFile(hFind,&FindFileData))  break;
  }
  FindClose(hFind);
}

#2


/******************************************************************
 函数名        :EnumFiles
 参数          :LPCTSTR lpPath 目标文件夹, LPCTSTR lpExt 要搜索的文件
 名,留空表示所有文件
 返回值        :是否找到
 功能描述      :示例:EnumFiles("C:\\windows\\system32", "*.dll");
                 
                                       Dev hankcs 2010
 ******************************************************************/
BOOL EnumFiles(LPCTSTR lpPath, LPCTSTR lpExt = NULL)
{
    char szFindCmd[MAX_PATH] = "";
    WIN32_FIND_DATA FindFileData;

    strcpy(szFindCmd, lpPath);
    strcat(szFindCmd, "\\*.*");

    HANDLE hFind = ::FindFirstFile(szFindCmd, &FindFileData);
    if(INVALID_HANDLE_VALUE == hFind)    return FALSE;
    
    while(TRUE)
    {
        if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
if (FindFileData.cFileName[0] != '.')
{
// 文件夹
   char szSubFolder[MAX_PATH] = "";
sprintf(szSubFolder, "%s\\%s", lpPath, FindFileData.cFileName);
EnumFiles(szSubFolder, lpExt);
}
        }
        if(!FindNextFile(hFind,&FindFileData))    break;
    }
FindClose(hFind);

if (lpExt == NULL)
{
sprintf(szFindCmd, "%s\\*.*", lpPath);
}
else
{
sprintf(szFindCmd, "%s\\%s", lpPath, lpExt);
}

hFind = ::FindFirstFile(szFindCmd, &FindFileData);
    if(INVALID_HANDLE_VALUE == hFind)    return FALSE;
    
    while(TRUE)
    {
if(! (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
        {
// 文件
char szBuffer[MAX_PATH] = "";
sprintf(szBuffer, "%s\\%s", lpPath, FindFileData.cFileName);
//MSGBOX(szBuffer);
// 找到的文件的路径是szBuffer,在这里加入你的图像处理代码
        }
        
        if(!FindNextFile(hFind,&FindFileData))    break;
    }
FindClose(hFind);

return TRUE;
}

把C:\\*.bmp什么的作为参数传入到这个函数里,在这个函数里加上你的读取代码,我的函数是一个迭代函数,会找到文件夹里所有图像文件,不重复地执行你的读取代码

#3


引用 1 楼 saliors 的回复:
用遍历文件的方法 FindFirstFile  FindNextFile

#include<windows.h>
#include<iostream>
#include<string>
using namespace std;
//只能处理目录:lpPath只能是路径
 

 

find(char * lpPath)
{
  char szFind[MAX_PATH]……

多谢多谢!!可是我怎么引用找到的路径啊。。。

#4


引用 2 楼 hankcs 的回复:
C/C++ code
?



1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465

/*****************************************************……

所以说假如我要用一个setfilename->(/*文件路径*/)的样式引用文件路径的话,就可以直接把szBuffer代入了吗?那在下一轮循环引用下一个文件路径时,又该怎么样呢?

#5


CFileFind finder;
  
     // build a string with wildcards
  
     CString strWildcard("C:");
     strWildcard += _T("\\*.*");
  
     // start working for files
  
     BOOL bWorking = finder.FindFile(strWildcard);
  
     while (bWorking)
     {
        bWorking = finder.FindNextFile();
  
        // skip . and .. files; otherwise, we'd
  
        // recur infinitely!
  
  
        if (finder.IsDots())
           continue;
  
        // if it's a directory, recursively search it
  
  
        if (finder.IsDirectory())
        {
           CString str = finder.GetFilePath();
           TRACE(_T("%s\n"), (LPCTSTR)str);
           Recurse(str);
           continue;
        }

        finder.GetFileName();
        finder.GetFilePath();
        finder.GetFileTitle();
     }
  
     finder.Close();

#6


GetFileName returns the file name, including the extension. For example, calling GetFileName to generate a user message about the file c:\myhtml\myfile.txt returns the file name myfile.txt. 

GetFilePath returns the entire path for the file. For example, calling GetFilePath to generate a user message about the file c:\myhtml\myfile.txt returns the file path c:\myhtml\myfile.txt. 

GetFileTitle returns the file name, excluding the file extension. For example, calling GetFileTitle to generate a user message about the file c:\myhtml\myfile.txt returns the file title myfile. 


#7


哪一部分可以取出路径啊 我弄不明白

#8


引用 2 楼 hankcs 的回复:
C/C++ code
?



1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465

/*****************************************************……

搜索出来了,十分万分感谢!!!

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号