linux c/c++ rename_file方法的问题

 

前提是在一参里的文件存在

二参也存在
调用后的结果是 /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里

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值