好友
阅读权限10
听众
最后登录1970-1-1
|
文件I/O的使用 当你们看到这个b东西时候是不是怀念C库了 其实这个很好用
CFileFind 使用这个就可以 操作文件了 , 首先来弄个操作文件 但是不用 因为看标题 我们学的是MFC 所以 我们使用 MFC自带的FindFileFindFilepstrName: 一个指针,指向包含要查找文件的名称的字符串。 如果为 pstrName 传递 NULL ,则 FindFile 将执行通配符 (.) 搜索。 dwUnused: 预留用于使用派生类实现 FindFile 多态。 必须为 0。 这是适用例 首先记住findfile是BOOL 类型 void CUIDlg::OnBnClickedFile()
{
CFileFind finder;
BOOL bWorking = finder.FindFile(_T("E:\\HMCL-3.5.8\\*.*"));// 如果 还有目录就是1 没了返回0 *.*表示所有文件 *是通配符 . * 是任意文件后缀
while (bWorking) // 循环判断
{
bWorking = finder.FindNextFile(); // 如果没了那么就会返回0 值
OutputDebugString((LPCTSTR)finder.GetFileName()); // 获取名字
OutputDebugString(_T("\n"));
OutputDebugString((LPCTSTR)finder.GetFilePath()); // 获取路径
}
}
​ 当然捏 我们可以加强一下 ok 做处理 另写参数递归void Enumfile(CString pRootDir) {
pRootDir += "\\*.*";
CFileFind finder;
BOOL bWorking = finder.FindFile(pRootDir);// 如果 还有目录就是1 没了返回0 *.*表示所有文件 *是通配符 . * 是任意文件后缀
while (bWorking)
{
bWorking = finder.FindNextFile();
if (finder.GetFileName() == "." || finder.GetFileName() == "..") // 判断上级,目录和本目录 . ..的存在
{
continue; // 过滤跳过本次循环输出
}
​
OutputDebugString((LPCTSTR)finder.GetFileName());
OutputDebugString(_T("\n"));
/* OutputDebugString((LPCTSTR)finder.GetFilePath());*/
}
}
​
void CUIDlg::OnBnClickedFile()
{
Enumfile(_T("E:\\HMCL-3.5.8"));
}
​
优化一下 肯定能跑 但是发现欸? 怎么回事 子目录但是跑不了 我们需要 通过递归的方式来获取子目录的 内容void Enumfile(CString pRootDir) {
pRootDir += "/*.*";
CFileFind finder;
CString Root;
BOOL bWorking = finder.FindFile(pRootDir);// 如果 还有目录就是1 没了返回0 *.*表示所有文件 *是通配符 . * 是任意文件后缀
while (bWorking)
{
bWorking = finder.FindNextFile();
if (finder.GetFileName() == "." || finder.GetFileName() == "..") // 判断上级,目录和本目录 . ..的存在
{
continue;
}
if (finder.IsDirectory()) { // 判断是否为目录
AfxOutputDebugString(_T("Root :%s"), (LPCTSTR)finder.GetFileName()); // 输出根节点
OutputDebugString(_T("\n"));
Enumfile(finder.GetFilePath()); // 递归获取路径
}
else
{
OutputDebugString((LPCTSTR)finder.GetFileName());
OutputDebugString(_T("\n"));
}
}
}这样的优化就可以 实现 获取文件 目录备注:GetVomlume 是system级别的 可以试试 |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|