如何获取文件名,创建时间,路径?

xixia07m 2017-05-19 09:36:58
如何在List control控件中显示某个目录下及子目录下的指定类型的文件名、创建时间、路径?多谢指点。
...全文
319 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xixia07m 2017-05-23
  • 打赏
  • 举报
回复
引用
WinExec("cmd /c dir /tw /o-d d:\\mydir\\*.* >d:\\files.txt",SW_HIDE); //然后读文件d:\files.txt的内容 WinExec("cmd /c dir /b /s /o-d d:\\mydir\\*.* >d:\\allfiles.txt",SW_HIDE); //然后读文件d:\allfiles.txt的内容
这两句代码加在程序的什么地方?
xixia07m 2017-05-23
  • 打赏
  • 举报
回复
引用
这两句加在上面程序的什么位置?
赵4老师 2017-05-23
  • 打赏
  • 举报
回复
WinExec("cmd /c dir /tw /o-d d:\\mydir\\*.* >d:\\files.txt",SW_HIDE);
//然后读文件d:\files.txt的内容
WinExec("cmd /c dir /b /s /o-d d:\\mydir\\*.* >d:\\allfiles.txt",SW_HIDE);
//然后读文件d:\allfiles.txt的内容
xixia07m 2017-05-23
  • 打赏
  • 举报
回复
请问4楼的同事,你的这个程序是截取的一段吧?是不是应该还有些头文件什么的?能否贴上来看看呢?或者说我要看懂你这个程序,我还应该看哪些资料。多谢。
starytx 2017-05-19
  • 打赏
  • 举报
回复
引用 3 楼 starytx 的回复:
可以这样获取到指定后缀的文件信息,仅供参考:

#include <vector>
// 文件信息结构体
struct FIleInfo
{
	std::wstring szFileName;
	std::wstring szFilePath;
	std::wstring szCreateTime;
};

// 递归遍历所有文件
void find(LPCTSTR lpPath, std::vector<FIleInfo> &fileList)
{
	std::wstring szFind(lpPath);
	WIN32_FIND_DATA FindFileData;

	szFind += _T("\\*.*");
	HANDLE hFind = ::FindFirstFile(szFind.c_str(), &FindFileData);
	if (INVALID_HANDLE_VALUE == hFind)    return;

	while (1)
	{
		if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{
			if (FindFileData.cFileName[0] != '.')
			{
				std::wstring szPath(lpPath);
				szPath += _T("\\");
				szPath += FindFileData.cFileName;
				find(szPath.c_str(), fileList );
			}
		}
		else
		{
			std::wstring strFileName = FindFileData.cFileName;  // 文件名
			std::wstring suffixStr = strFileName.substr(strFileName.find_last_of('.') + 1);
			if (suffixStr == _T("txt"))		// 根据后缀选出自己感兴趣的文件,比如 txt文件,注意大小写,如果想不区分大小写,需要自己统一转化为大写或小写然后比较
			{
				FILETIME ft = FindFileData.ftCreationTime;		// 取得创建时间
				SYSTEMTIME st = { 0 };
				TCHAR buf[64] = { 0 };
				FileTimeToSystemTime(&ft, &st);
				swprintf_s(buf, _T("%4d年-%02d月-%02d日 %02d:%02d:%02d"), st.wYear, st.wMonth, st.wDay, st.wHour+8 /*北京时间*/, st.wMinute ,st.wSecond);
				std::wstring strFilePath = lpPath;
				strFilePath += _T("\\");
				strFilePath += FindFileData.cFileName;	 // 文件全路径名

				FIleInfo fi;
				fi.szFileName = strFileName;
				fi.szFilePath = strFilePath;
				fi.szCreateTime = buf;
				fileList.push_back(fi);
			}
		}
		if (!FindNextFile(hFind, &FindFileData))    break;
	}
	FindClose(hFind);
}

int _tmain(int argc, _TCHAR* argv[])
{
	std::vector<FIleInfo> fileList;
	find(_T("D:\\xsmposc\\XSMPos"), fileList);  // 取得文件信息,可自行插入列表框
	
	return 0;
}
修正一下: FileTimeToLocalFileTime(&(FindFileData.ftCreationTime), &ft); // 转换成本地时间 FileTimeToSystemTime(&ft, &st); // 这句之前加上上一句,就不用在小时那里+8了
kakabulusi 2017-05-19
  • 打赏
  • 举报
回复
观摩一下,有一定的参考价值
starytx 2017-05-19
  • 打赏
  • 举报
回复
可以这样获取到指定后缀的文件信息,仅供参考:

#include <vector>
// 文件信息结构体
struct FIleInfo
{
	std::wstring szFileName;
	std::wstring szFilePath;
	std::wstring szCreateTime;
};

// 递归遍历所有文件
void find(LPCTSTR lpPath, std::vector<FIleInfo> &fileList)
{
	std::wstring szFind(lpPath);
	WIN32_FIND_DATA FindFileData;

	szFind += _T("\\*.*");
	HANDLE hFind = ::FindFirstFile(szFind.c_str(), &FindFileData);
	if (INVALID_HANDLE_VALUE == hFind)    return;

	while (1)
	{
		if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{
			if (FindFileData.cFileName[0] != '.')
			{
				std::wstring szPath(lpPath);
				szPath += _T("\\");
				szPath += FindFileData.cFileName;
				find(szPath.c_str(), fileList );
			}
		}
		else
		{
			std::wstring strFileName = FindFileData.cFileName;  // 文件名
			std::wstring suffixStr = strFileName.substr(strFileName.find_last_of('.') + 1);
			if (suffixStr == _T("txt"))		// 根据后缀选出自己感兴趣的文件,比如 txt文件,注意大小写,如果想不区分大小写,需要自己统一转化为大写或小写然后比较
			{
				FILETIME ft = FindFileData.ftCreationTime;		// 取得创建时间
				SYSTEMTIME st = { 0 };
				TCHAR buf[64] = { 0 };
				FileTimeToSystemTime(&ft, &st);
				swprintf_s(buf, _T("%4d年-%02d月-%02d日 %02d:%02d:%02d"), st.wYear, st.wMonth, st.wDay, st.wHour+8 /*北京时间*/, st.wMinute ,st.wSecond);
				std::wstring strFilePath = lpPath;
				strFilePath += _T("\\");
				strFilePath += FindFileData.cFileName;	 // 文件全路径名

				FIleInfo fi;
				fi.szFileName = strFileName;
				fi.szFilePath = strFilePath;
				fi.szCreateTime = buf;
				fileList.push_back(fi);
			}
		}
		if (!FindNextFile(hFind, &FindFileData))    break;
	}
	FindClose(hFind);
}

int _tmain(int argc, _TCHAR* argv[])
{
	std::vector<FIleInfo> fileList;
	find(_T("D:\\xsmposc\\XSMPos"), fileList);  // 取得文件信息,可自行插入列表框
	
	return 0;
}
oyljerry 2017-05-19
  • 打赏
  • 举报
回复
http://www.bubuko.com/infodetail-1320943.html
worldy 2017-05-19
  • 打赏
  • 举报
回复
fFindFirst、FindNext遍历目录创建List

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧