WIndowMFC的简单使用IO流
文件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级别的 可以试试 多谢分享 多谢分享
页:
[1]