VC枚举(遍历)文件夹里面的文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bingdianlanxin/article/details/45115125

本文简单介绍下枚举文件夹中文件的操作。


首先,新建对话框应用程序


为了查看方便,我们在对话框上添加一个list列表,用于显示我们枚举到的文件


为了演示方便,我在工程中新建了一个文件夹MyFolder

 


该文件夹中文件



子文件夹中文件

 


好了,看我们演示代码

头文件

private:
	void UpdateList();
	void FindMyFile(CString sFolderPath);
	void SetListInit();

	CStringArray m_arrParName;

源文件

void CEnumFileDlg::SetListInit()
{
	//属性设置
	m_list.ModifyStyle(LVS_TYPEMASK,LVS_REPORT&LVS_TYPEMASK|LVS_SINGLESEL);
	DWORD dwStyle = m_list.GetExtendedStyle();
	m_list.SetExtendedStyle(dwStyle|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	
	//设置行宽
	CImageList image;
	image.Create(1,30,ILC_COLOR24|ILC_MASK,4,0);
	m_list.SetImageList(&image,LVSIL_SMALL);
	
	//设置字体和大小
	CFont font;
	font.CreateFont(16,0,0,0,FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,"宋体");
	m_list.SetFont(&font);
	m_list.GetHeaderCtrl()->SetFont(&font);
	
	//设置标题头
	m_list.InsertColumn(0,"序号",LVCFMT_LEFT,100,0);
	m_list.InsertColumn(1,"文件名",LVCFMT_LEFT,200,0);
	
}

void CEnumFileDlg::OnButton() 
{
	m_arrParName.RemoveAll();

	//获取当前路径
	CString sCurrentPath = "";
	char Path[270];
	DWORD len = 0;
	DWORD i=0;
	len = GetCurrentDirectory(270,Path);
	for (i=0; i<len; i++)
	{
		sCurrentPath = sCurrentPath + CString(Path[i]);
	}

	CString sMyFolder = sCurrentPath + "\\MyFolder";
	FindMyFile(sMyFolder);

	//查找完成后更新列表
	UpdateList();
}

void CEnumFileDlg::FindMyFile(CString sFolderPath)
{
	//遍历文件夹里面的文件
	WIN32_FIND_DATA FindData;
	HANDLE hError;
	int FileCount = 0;
	char FilePathName[1024];
	strcpy(FilePathName,sFolderPath);
	strcat(FilePathName,"\\*.*");
	hError = FindFirstFile(FilePathName,&FindData);
	if (hError == INVALID_HANDLE_VALUE)
	{
		MessageBox("查找失败!");
		return;
	}
	while(::FindNextFile(hError,&FindData))
	{
		if (strcmp(FindData.cFileName,".") == 0 ||
			strcmp(FindData.cFileName,"..") == 0) 
		{
			continue;
		}

		if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//遇到文件夹继续遍历
		{
			CString sTempPath = sFolderPath + "\\" + FindData.cFileName;
			FindMyFile(sTempPath);
			SetLastError(0);
			continue;
		}
/*
		if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//遇到文件夹不管
		{
			continue;
		}
*/		
		m_arrParName.Add(FindData.cFileName);
		FileCount++;
	}
}

void CEnumFileDlg::UpdateList()
{
	CString str = "";
	int cnt = m_arrParName.GetSize();
	for (int i=0; i<cnt; i++)
	{
		str.Format("%d",i+1);
		m_list.InsertItem(i,str);
		m_list.SetItemText(i,1,m_arrParName[i]);
	}
}

运行效果



点击枚举文件按钮(不枚举子文件内容)



点击枚举文件按钮(枚举子文件内容)



没有更多推荐了,返回首页