给一个目录下的一个已存在的文件生成一个新的文件名

来源:互联网 发布:用友远程软件 编辑:程序博客网 时间: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
原创粉丝点击