前提是在一参里的文件存在
二参也存在
调用后的结果是 /home/jiangli/test/rename.txt没了
出现在/home/jiangli/test/home/jiangli/test/rename.txt
问题就是目录解析的有点问题啊
rename_file里的c_str是库函数标准头文件是<cstring>作用是把string串变成C字符串内容与原来是一样的
(gdb) p szDestPath
"/home/jiangli/test1/"
(gdb) p strPathFile
"/home/jiangli/test/rename.txt"
(gdb) p strPathFile.c_str()
$8 = 0x642fc8 "/home/jiangli/test/rename.txt"
(gdb) p strOutPathFile
"/home/jiangli/test1//home/jiangli/test/rename.txt"
int32 CFile::rename_file(string &strFileName,const char *szDestPath)
{
//strFileName shi chuan jin lai de can shu
//m_strPath mei gen zong chu lai shi shen me
string strPathFile = m_strPath + strFileName;
string strOutPathFile = string(szDestPath) + strFileName;
struct stat statbuf;
if(stat(strPathFile.c_str(), &statbuf)==0)
{
if(statbuf.st_size == 0) return -2;
int32 nRet = CFileBase::rename_file(strPathFile.c_str(), strOutPathFile.c_str(), true);
if(nRet!=0) return -2;
}
return 0;
}
调用的地方
string strSrc = "/home/jiangli/test/rename.txt";
CFile fi;
fi.rename_file(strSrc,"/home/jiangli/test1/");
改完了之后
int32 CFile::rename_file(string &strFileName,const char *szDestPath)
{
//strFileName shi chuan jin lai de can shu
//m_strPath mei gen zong chu lai shi shen me
string strPathFile = m_strPath + strFileName;//no use
char *p = strrchr(strFileName.c_str(),'/');//strrchr 的第一个参数只能吃char类型的,但是strFileName是string类型的所以调用一下库函数的c_str()函数 就完成了转换
char *szFileName = p+1;//这里重新定义了一个字符型指针变量szFileName用来存放捕捉到的传进来的1参的目录后面的文件名字rename.txt
string strOutPathFile;
if(strcmp((szDestPath+strlen(szDestPath)-1),"/")!=0)//********这里判断一下目标目录的最后一个字符是不是/ 若是就不用加/ 若不是就加个/
{
strOutPathFile = string(szDestPath) + "/" + szFileName;//若传进来的目标目录/home/jiangli/test 则最后就在jiangli目录下生成一个testrename.txt了
}
else
{
strOutPathFile = string(szDestPath)+ szFileName;
}
struct stat statbuf;
if(stat(strFileName.c_str(), &statbuf)==0)
{
if(statbuf.st_size == 0) return -2;
int32 nRet = CFileBase::rename_file(strFileName.c_str(), strOutPathFile.c_str(), true);
if(nRet!=0) return -2;
}
return 0;
}
改完之后test里的rename.txt移到了test1里