给一个目录下的一个已存在的文件生成一个新的文件名
来源:互联网 发布:用友远程软件 编辑:程序博客网 时间:2024/06/05 00:57
微软在Shlobj.h中提供了PathYetAnotherMakeUniqueName,可以直接使用。
下边是我自己编写的代码:
c:\1\1(aa).txt
c:\1\1(aa).txt不存在 -> c:\1\1(aa).txt
c:\1\1(aa).txt已存在,c:\1\1(aa) (0).txt不存在 -> c:\1\1(aa) (0).txt
c:\1\1(aa).txt已存在,c:\1\1(aa) (0).txt已存在 -> c:\1\1(aa) (1).txt
VOID ModifySaveAs(LPTSTR lpPath){LPTSTRlpPostion= NULL;LPTSTRlpPositionPre= NULL;TCHARNewFileName[MAX_PATH]= {0};LPTSTRlpPositionPost= NULL;ULONGulCount= 0;TCHARNum[MAX_PATH]= {0};TCHARTmpFileName[MAX_PATH]= {0};do {if (!lpPath)break;// 确保保存目录存在lpPostion = StrRChr(lpPath, lpPath + _tcslen(lpPath), _T('\\'));if (!lpPostion)break;CopyMemory(NewFileName, lpPath, (lpPostion - lpPath) * sizeof(TCHAR));if (!PathFileExists(NewFileName)){SHCreateDirectory(NULL, NewFileName);break;}_tcscpy_s(TmpFileName, _countof(TmpFileName), lpPath);while (PathFileExists(TmpFileName)){ulCount = 0;lpPostion = NULL;lpPositionPost = NULL;lpPositionPre = NULL;ZeroMemory(Num, sizeof(Num));ZeroMemory(NewFileName, sizeof(NewFileName));lpPostion = StrRChr(TmpFileName, TmpFileName + _tcslen(TmpFileName), _T('.'));if (lpPostion)lpPostion--;elselpPostion = TmpFileName + _tcslen(TmpFileName) - 1;lpPositionPost = StrRChr(TmpFileName, lpPostion + 1, _T(')'));lpPositionPre = StrRChr(TmpFileName, lpPostion + 1, _T('('));if (lpPositionPre && lpPositionPost && lpPositionPre < lpPositionPost){lpPositionPost--;lpPositionPre++;CopyMemory(NewFileName, TmpFileName, (lpPositionPre - TmpFileName) * sizeof(TCHAR));CopyMemory(Num, lpPositionPre, (lpPositionPost - lpPositionPre + 1) * sizeof(TCHAR));ulCount = StrToInt(Num);if (ulCount ||((_tcslen(Num) == 1) && ((*Num >= _T('0')) && (*Num <= _T('9'))))){ulCount++;StringCbPrintf(Num, sizeof(Num), _T("%d"), ulCount);_tcscat_s(NewFileName, Num);_tcscat_s(NewFileName, lpPositionPost + 1);ZeroMemory(TmpFileName, MAX_PATH * sizeof(TCHAR));_tcscpy_s(TmpFileName, MAX_PATH, NewFileName);}else{CopyMemory(NewFileName + (lpPositionPre - TmpFileName), lpPositionPre, (lpPositionPost - lpPositionPre + 2) * sizeof(TCHAR));_tcscat_s(NewFileName, _T(" ("));StringCbPrintf(Num, sizeof(Num), _T("0"));_tcscat_s(NewFileName, Num);_tcscat_s(NewFileName, _T(")"));_tcscat_s(NewFileName, lpPostion + 1);ZeroMemory(TmpFileName, MAX_PATH * sizeof(TCHAR));_tcscpy_s(TmpFileName, MAX_PATH, NewFileName);}}else{CopyMemory(NewFileName, TmpFileName, (lpPostion - TmpFileName + 1) * sizeof(TCHAR));_tcscat_s(NewFileName, _T(" ("));StringCbPrintf(Num, sizeof(Num), _T("0"));_tcscat_s(NewFileName, Num);_tcscat_s(NewFileName, _T(")"));_tcscat_s(NewFileName, lpPostion + 1);ZeroMemory(TmpFileName, MAX_PATH * sizeof(TCHAR));_tcscpy_s(TmpFileName, MAX_PATH, NewFileName);}}CopyMemory(lpPath, TmpFileName, _tcslen(TmpFileName) * sizeof(TCHAR));*(lpPath + _tcslen(TmpFileName)) = _T('\0');} while (FALSE);return;}
0 0
- 给一个目录下的一个已存在的文件生成一个新的文件名
- 获得一个目录下的文件名 *.exe
- 取文件目录的最后一个文件名
- 删除 一个文件在多个目录下的存在
- 将一个目录下的所有文件的文件名存入一个数组中
- 怎样读取一个文件夹下的头文件名,并整理出一个新的头文件
- 读取指定目录下的所有文件生成一个excel
- golang遍历某个目录下的文件,并读取文件名到一个csv文件
- 获得一个目录下的文件名及文件属性
- 用Perl读取一个目录下的所有文件名
- 用Perl读取一个目录下的所有文件名
- leveldb:DB::Open创建一个新数据库或者打开一个已存在的数据库
- 等待一个已存在的进程
- 得到一个指定目录下所有文件的文件名,子目录名不要
- 删除一个目录下的重复文件(与文件名无关)
- 打印指引目录下的文件名,存储到一个txt文件中
- 遍历一个目录下的文件,并把文件名保存在vector中
- 删除一个目录下的重复文件(与文件名无关)
- Android在配置文件中隐藏输入法
- GDB调试
- P-Value检验和假设检验
- iOS开发,创建自己的静态库
- 厂商发力企业级搜索 国内市场待开拓
- 给一个目录下的一个已存在的文件生成一个新的文件名
- 串操作算法虚拟实现
- Unity3D 4.0新功能:Mecanim教程
- 访问服务器提示: connection refused:connect
- HTML5 canvas粒子生成人物面部轮廓插件
- linux下文件备份同步工具rsync
- Android—社会化分享
- 建立一个简单链表输出同学的学号,姓名
- php取得当前时间函数