一、使用::FindFirstFile和::FindNextFile方法
#include "StdAfx.h"
#include <windows.h>
#include <stdio.h>
#include <string.h>
#define LEN 1024
int FileCount = 0;
// 深度優先遞歸遍歷目錄中所有的文件
BOOL DirectoryList(LPCSTR Path)
{
WIN32_FIND_DATA FindData;
HANDLE hError;
char FilePathName[LEN];
// 構造路徑
char FullPathName[LEN];
strcpy(FilePathName, Path);
strcat(FilePathName, "\\*.*");
hError = FindFirstFile(FilePathName, &FindData);
if (hError == INVALID_HANDLE_VALUE)
{
printf("搜索失敗!");
return 0;
}
while(::FindNextFile(hError, &FindData))
{
// 過慮.和..
if (strcmp(FindData.cFileName, ".") == 0
|| strcmp(FindData.cFileName, "..") == 0 )
{
continue;
}
// 構造完整路徑
wsprintf(FullPathName, "%s\\%s", Path,FindData.cFileName);
FileCount++;
// 輸出本級的文件
printf("%s\n", FullPathName);
if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
DirectoryList(FullPathName);
}
}
return 0;
}
void main()
{
DirectoryList("F:\\123");
printf("共%d個文件\n",FileCount);
}
二、利用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;
}
三、使用IO.H中的_findfirst和_findnext方法
在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
{一、使用::FindFirstFile和::FindNextFile方法
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);
}
二、利用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;
}
三、使用IO.H中的_findfirst和_findnext方法
在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
do {
AfxGetMainWnd()->SetWindowText(c_file.name);
} while (_findnext(hFile, &c_file) == 0);
}
_findclose(hFile);
對了,別忘了在你的工程中包括頭文件IO.H
jpg改rar