如何给一组乱序的文件编号?各位大侠请指教!

duoxiezhijiao 2005-10-20 10:29:37
一个文件夹下有若干个乱序的BMP图片文件,比如说文件名为1.bmp,10.bmp,14.bmp.....,等等。现在想把这些文件按顺序改名,改成1.bmp,2.bmp,3.bmp,4.bmp.....等等,如何用一段程序解决这个问题,因为若手工逐个改太费时间了!多谢!
...全文
77 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
djfu 2005-10-22
  • 打赏
  • 举报
回复
给源码吧:

#include <afxwin.h>
#include <windows.h>

#include <iostream>
#include <string>
#include <vector>
using namespace std;

#include <shlwapi.h>
#pragma comment(lib, "shlwapi.lib")

BOOL FindFile(CString sourceDir, CString Filter, CStringArray &sa)
{
CFileFind finder;
CString strWildFind;

if(sourceDir == "")
return FALSE;

if(!PathFileExists(sourceDir.operator LPCTSTR()))
return FALSE;

if(sourceDir.ReverseFind('\\') != sourceDir.GetLength() - 1 )
strWildFind = sourceDir + "\\" + "*.*";
else
strWildFind = sourceDir + "*.*";

// start working for files
BOOL bWorking = finder.FindFile(strWildFind);

while (bWorking)
{
bWorking = finder.FindNextFile();

// skip . and .. files; otherwise, we'd
// recur infinitely!

if (finder.IsDots())
continue;

// if it's a directory, recursively search it

if (finder.IsDirectory())
{
CString str = finder.GetFilePath();
FindFile(str, Filter, sa);
}
else
{
CString strFilePath = finder.GetFilePath();
if(strFilePath.Find(Filter.Right(4)) == (strFilePath.GetLength() - 4) )
sa.Add(strFilePath);
}
}

finder.Close();
return TRUE;
}

int main()
{
CStringArray sa;
FindFile("d:\\temp", "*.bmp", sa);
int nSize = sa.GetSize();
cout << "Total find " <<nSize << " files: " << endl << endl;
CString sOldFileName, sNewFileName;
CString sPath, sExt, sNum;
int nIndex = 0;
int nPos1, nPos2;
for(int i = 0; i < sa.GetSize(); i++, nIndex++)
{
sOldFileName = sa[i];
nPos1 = sOldFileName.ReverseFind('\\');
nPos2 = sOldFileName.ReverseFind('.');
sPath = sOldFileName.Left(nPos1 + 1);
sExt = sOldFileName.Right(sOldFileName.GetLength() - nPos2);
sNum.Format("%03d", nIndex);
sNewFileName = sPath + sNum + sExt;
while(PathFileExists(sNewFileName.operator LPCTSTR()))
{
nIndex ++;
sNum.Format("%03d", nIndex);
sNewFileName = sPath + sNum + sExt;
}

try
{
CFile::Rename(sOldFileName.operator LPCTSTR(), sNewFileName.operator LPCTSTR());
}
catch(...)
{
cout << "Rename file from:" << sOldFileName.operator LPCTSTR() << " to" << sNewFileName.operator LPCTSTR() << " failure!" <<endl;
}
cout << sa[i].operator LPCTSTR() << endl;
}
getchar();
return 0;
}


duoxiezhijiao 2005-10-21
  • 打赏
  • 举报
回复
回复人: djfu(一马平川) ( ) 信誉:99 2005-10-20 23:14:00 得分: 0

步骤:
1、找到指定的目录。
2、搜索指定目录下的指定后缀的文件名(*.bmp)。
3、遍历这些.bmp文件,逐一改名。
改名规则:可以使用 %02d.bmp 即: 00.bmp--99.bmp
**********************************************************************************
这位老兄,小弟比较菜,麻烦告诉一下如何用代码实现 “搜索指定目录下的指定后缀的文件名(*.bmp)”。 谢了!!

computerjjk 2005-10-20
  • 打赏
  • 举报
回复
3、遍历这些.bmp文件,逐一改名。
这里好像有些工作要做
djfu 2005-10-20
  • 打赏
  • 举报
回复
步骤:
1、找到指定的目录。
2、搜索指定目录下的指定后缀的文件名(*.bmp)。
3、遍历这些.bmp文件,逐一改名。
改名规则:可以使用 %02d.bmp 即: 00.bmp--99.bmp

16,551

社区成员

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

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

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