出现这样的问题,是由于我们FTP上的的打包文件解包到本地文件夹中,由于FTP上打包文件中含一个.db的文件,再对其文件进行写数据时,出现了拒绝访问异常(其他文件写数据一切正常),没办法只能想办把此类型文件扩展名改成了.tmp临时文件,当数据写完后再改回原来的.db文件,但重命名时就出现了下面异常,废话不多说了。。。
问题:C++ 对新创建的文件进行写数据后,如果再对其进行重命名,则可能会出现拒绝访问
原因:是因为系统认为当前文件夹中可能与你重命名件同名文件存在,所以不允许重命令,会报出“拒绝访问异常"(个人理解是这样的)
解决方案:
CString oldName = "test.txt";
CString newName = "newTest.txt";
CFile fwrite(oldName, CFile::modeCreate | CFile::modeWrite)
char *pFileData = new char[10];
memset(p_file, '/0', 10);
fwrite.Close();//需要先关闭
delete pFileData;
pFileData = NULL;
try
{
// 这步很重要 网上有这样做的,但没说明,就没用(因为心想这个文件本来就没有,干嘛要删除)
CFile::Remove(newName);//为了方便偷懒就不判断文件是否存,直接删除
}
catch(CFileException *ex)
{//文件不存在会出现异常
}
CFile::Rename(oldName,newName);
/*
//网上有还种方法是:
CString oldName = "test.txt";
CString newName = "d://newTest.txt";
CFile::Rename(oldName, newName);
//就是把原始文件重命名后放到另外一个目录中。
///上面这种方法没试,感觉如果另外目录中已经包含了重命后的文件仍然可能会出现上面的问题
//有兴趣的朋友可以试一下,因为项目需要需当前文件重命名,不能改名后放到其他目录中。
*/