环境mfc使用 Unicode 字符集
代码仅供参考
代码:
#include <sstream>
using namespace std;
CStringA CStrW2CStrA(const CStringW &cstrSrcW)
{
int len = WideCharToMultiByte(CP_ACP, 0, LPCWSTR(cstrSrcW), -1, NULL, 0, NULL, NULL);
char *str = new char[len];
memset(str, 0, len);
WideCharToMultiByte(CP_ACP, 0, LPCWSTR(cstrSrcW), -1, str, len, NULL, NULL);
CStringA cstrDestA = str;
delete[] str;
return cstrDestA;
}
bool ChangeFileName(CString path,int index)
{
CStringA pathStrA = CStrW2CStrA(path);
if(index < 0)
return false;
stringstream intToString;
intToString<<index;
string strFromInt = intToString.str();
int strFromIntSize = strFromInt.size();
strFromIntSize = strFromIntSize -3;
while(strFromIntSize<0)
{
strFromInt = "0" + strFromInt;
strFromIntSize++;
}
string filePath = pathStrA.GetBuffer(0);
std::size_t found = filePath.find_last_of("/\\");
if(found < 0)
return false;
string onlyPath = filePath.substr(0,found+1);
string onlyName = filePath.substr(found+1);
std::size_t _found = onlyName.find_last_of("_");
if(_found < 0)
return false;
strFromInt = "_No_"+strFromInt;
string dstName = onlyName.substr(0,_found) + strFromInt +onlyName.substr(_found);
string dstPath = onlyPath+dstName;
if(rename(filePath.c_str(),dstPath.c_str()) == 0)
return true;
else
return false;
}
测试代码:
if(!ChangeFileName(CString("D:\\新建文件夹\\Class_001_528.bmp"),2))
{
::MessageBoxA(NULL,"失败","",MB_OK);
}
文件名改为:Class_001_No_002_528.bmp
程序员共勉!