FindNextFile遍历目录多了两个点..

悠然的二货 2018-10-24 10:51:48

WIN32_FIND_DATA FindFileData;
HANDLE hFind;
hFind = FindFirstFile(_T(".\\save\\*"), &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{

}
else
{
while (FindNextFile(hFind, &FindFileData))
{
m_ListBox_Date.AddString(FindFileData.cFileName);
}
FindClose(hFind);
}


该目录下只有一个2018-10-24的文件夹,不知道为什么会多出两个点

...全文
124 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2018-10-24
  • 打赏
  • 举报
回复
需要过滤.和..这两个路径~~~

while (FindNextFile(file, &pNextInfo))
{
if (pNextInfo.cFileName[0] == '.')
continue;
。。。
}
smwhotjay 2018-10-24
  • 打赏
  • 举报
回复
楼上说了
schlafenhamster 2018-10-24
  • 打赏
  • 举报
回复
'.' 是当前目录 '..' 是 父目录
赵4老师 2018-10-24
  • 打赏
  • 举报
回复
system("dir /b /a-d c:\\*.* >d:\\allfiles.txt");
//读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字
system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt");
//读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录
system("dir /b /ad c:\\*.* >d:\\alldirs.txt");
//读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字
请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。
如果嫌system黑窗口一闪,将system("...")替换为WinExec("cmd /c ...",SW_HIDE);
schlafenhamster 2018-10-24
  • 打赏
  • 举报
回复
do
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{// dir
if(FindFileData.cFileName[0] != '.')
{
批量重命名软件(VC6) 2019年03月30日 18:25:36 南棱笑笑生 阅读数:4 编辑 有时候需要批量重命名一整个目录的文件,一个一个的修改肯定花时间和精力了! https://item.jd.com/42982472342.html 基本信息 书名:Visual C++开发实战宝典(配光盘)(软件开发实战宝典) 定价:79.80元 作者:宋坤 等编著 出版社:清华大学出版社 出版日期:2009-12-01 ISBN:9787302209058 字数: 页码: 版次: 装帧:平装 开本:16开 商品重量: 可能宋坤先生默默无名,从里面还是找到了一个有用的程序,比如第8章的: 8.7 实战 8.7.2 对位图文件进行批量编号命名..............348 例8.12 目录名:FileRename 由于VC6早已经遭到淘汰了,但是联系编程还有稍许价值,现阶段只能在虚拟机VMware14中运行WINDOWS XP来安装运行VC6了。 还有一个重要的问题是360杀毒软件会将你编译生成的EXE文件都处理为未知的可疑文件,提醒你隔离或者删除!^_ 在360的老板周鸿祎的眼里草木皆兵:宁可错杀一千,不可放走一个! 为了简单期间,我将360杀毒和360安全卫士都退出了! 发现未知程序将要运行,是否放行? 可能是没有数字签名,微软的比尔盖茨也告诉你的程序不安全:^_ 无法验证发布者。您确定要运行此软件吗? 由于是为重命名BMP扩展名的位图文件准备的程序,因此程序运行的时候除了:E:\刘杨-商业修图教程 目录多了一个BMP目录之外啥也没有。(前缀使用:刘杨-商业修图教程。下同) 首先干掉必须是BMP扩展名! //开始批量重命名文件 void CFileRenameDlg::OnBtStart() { CFileFind flFind; CString szDir; m_FileDir.GetWindowText(szDir); flFind.FindFile(szDir + "\\*.*"); //统计位图数量 int nBmpCount = 0; CFileFind flFindCount; flFindCount.FindFile(szDir + "\\*.*"); while (flFindCount.FindNextFile()) { if (!flFindCount.IsDirectory()) { CString szPath; szPath = flFindCount.GetFilePath(); char szLetter[128] = {0}; //盘符 char szCurDir[128] = {0}; //目录 char szName[128] = {0}; //文件名 char szExt[128] = {0}; //扩展名 _splitpath(szPath.GetBuffer(0), szLetter, szCurDir, szName, szExt); //分解目录 //判断文件扩展名 //if (strcmp(szExt, ".bmp") == 0) { nBmpCount++; } } } flFindCount.Close(); m_Progress.SetRange32(0, nBmpCount); //遍历位图文件 szDir = szDir + "\\bmp"; CreateDirectory(szDir, NULL); //创建目录 int nIndex = 1; while(flFind.FindNextFile()) { if (!flFind.IsDirectory()) { CString szPath; szPath = flFind.GetFilePath(); char szLetter[128] = {0}; //盘符 char szCurDir[128] = {0}; //目录 char szName[128] = {0}; //文件名 char szExt[128] = {0}; //扩展名 _splitpath(szPath.GetBuffer(0), szLetter, szCurDir, szName, szExt); //分解目录 //获取前缀 CString szPrefix; m_Prefix.GetWindowText(szPrefix); //判断文件扩展名 //if (strcmp(szExt, ".bmp") == 0) { CFile file; CString szCreatedName = szDir; szCreatedName += "\\"; szCreatedName += szPrefix; //添加前缀 CString szIndex; szIndex.Format("%d", nIndex); szCreatedName += szIndex; //添加序号 szCreatedName += ".bmp"; m_Progress.SetPos(nIndex); nIndex++; //创建新的文件 file.Open(szCreatedName, CFile::modeCreate|CFile::modeReadWrite); CFile readFile; readFile.Open(szPath, CFile::modeRead); DWORD dwLen = readFile.GetLength(); BYTE *pData = new BYTE[dwLen]; readFile.ReadHuge((void*)pData, dwLen); readFile.Close(); file.WriteHuge((void*)pData, dwLen); file.Close(); delete [] pData; szCreatedName.ReleaseBuffer(); szIndex.ReleaseBuffer(); } } } flFind.Close(); CString szBmpCount; szBmpCount.Format("%d个文件!", nBmpCount); MessageBox("操作完成,处理" + szBmpCount); szBmpCount.ReleaseBuffer(); } 生成的文件名为: 刘杨-商业修图教程1.bmp 刘杨-商业修图教程10.bmp 刘杨-商业修图教程2.bmp 刘杨-商业修图教程3.bmp 刘杨-商业修图教程4.bmp 刘杨-商业修图教程5.bmp 刘杨-商业修图教程6.bmp 刘杨-商业修图教程7.bmp 刘杨-商业修图教程8.bmp 刘杨-商业修图教程9.bmp 还是需要修改扩展名: //开始批量重命名文件 void CFileRenameDlg::OnBtStart() { CFileFind flFind; CString szDir; m_FileDir.GetWindowText(szDir); flFind.FindFile(szDir + "\\*.*"); //统计位图数量 int nBmpCount = 0; CFileFind flFindCount; flFindCount.FindFile(szDir + "\\*.*"); while (flFindCount.FindNextFile()) { if (!flFindCount.IsDirectory()) { CString szPath; szPath = flFindCount.GetFilePath(); char szLetter[128] = {0}; //盘符 char szCurDir[128] = {0}; //目录 char szName[128] = {0}; //文件名 char szExt[128] = {0}; //扩展名 _splitpath(szPath.GetBuffer(0), szLetter, szCurDir, szName, szExt); //分解目录 //判断文件扩展名 //if (strcmp(szExt, ".bmp") == 0) { nBmpCount++; } } } flFindCount.Close(); m_Progress.SetRange32(0, nBmpCount); //遍历位图文件 szDir = szDir + "\\bmp"; CreateDirectory(szDir, NULL); //创建目录 int nIndex = 1; while(flFind.FindNextFile()) { if (!flFind.IsDirectory()) { CString szPath; szPath = flFind.GetFilePath(); char szLetter[128] = {0}; //盘符 char szCurDir[128] = {0}; //目录 char szName[128] = {0}; //文件名 char szExt[128] = {0}; //扩展名 _splitpath(szPath.GetBuffer(0), szLetter, szCurDir, szName, szExt); //分解目录 //获取前缀 CString szPrefix; m_Prefix.GetWindowText(szPrefix); //判断文件扩展名 //if (strcmp(szExt, ".bmp") == 0) { CFile file; CString szCreatedName = szDir; szCreatedName += "\\"; szCreatedName += szPrefix; //添加前缀 CString szIndex; szIndex.Format("%d", nIndex); szCreatedName += szIndex; //添加序号 //szCreatedName += ".bmp"; szCreatedName += szExt; m_Progress.SetPos(nIndex); nIndex++; //创建新的文件 file.Open(szCreatedName, CFile::modeCreate|CFile::modeReadWrite); CFile readFile; readFile.Open(szPath, CFile::modeRead); DWORD dwLen = readFile.GetLength(); BYTE *pData = new BYTE[dwLen]; readFile.ReadHuge((void*)pData, dwLen); readFile.Close(); file.WriteHuge((void*)pData, dwLen); file.Close(); delete [] pData; szCreatedName.ReleaseBuffer(); szIndex.ReleaseBuffer(); } } } flFind.Close(); CString szBmpCount; szBmpCount.Format("%d个文件!", nBmpCount); MessageBox("操作完成,处理" + szBmpCount); szBmpCount.ReleaseBuffer(); } 得到的文件名为: 刘杨-商业修图教程1.avi 刘杨-商业修图教程10.avi 刘杨-商业修图教程2.avi 刘杨-商业修图教程3.avi 刘杨-商业修图教程4.avi 刘杨-商业修图教程5.avi 刘杨-商业修图教程6.avi 刘杨-商业修图教程7.avi 刘杨-商业修图教程8.avi 刘杨-商业修图教程9.avi 现在你就会发现你所命名的文件一位数和两位数的掺杂在一起,不整洁! 假定你所批量命名的文件名不超过100个(最多99个。) 继续修改代码: 刘杨-商业修图教程01.avi 刘杨-商业修图教程02.avi 刘杨-商业修图教程03.avi 刘杨-商业修图教程04.avi 刘杨-商业修图教程05.avi 刘杨-商业修图教程06.avi 刘杨-商业修图教程07.avi 刘杨-商业修图教程08.avi 刘杨-商业修图教程09.avi 刘杨-商业修图教程10.avi 结束语: 本程序还可以继续修改,改名之前直接统计需要重命名的文件的数目,然后自动配置一位数、二位数、三位数等等。 可能是微软的比尔盖茨的原因,最后重命名的文件的计数有问题。不影响工作!

16,472

社区成员

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

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

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