C语言中rename() 和remove()函数属于文件处理函数,其中rename() 对文件或目录进行移动和删除。
int ret = (, );
笔者在一个日志回滚记录的功能中使用到了这个函数,但是当newfilepath中的文件存在时无法成功复制,ret返回值是-1, 使用errno查看错误时得到errno = 17,file exists
if (errno != 0){
printf("%dn",errno);
printf("%dn",strerror(errno);
}
查阅各种雷同的文章仍未得到为什么rename()时为什么无法直接覆盖旧文件的原因。这时候笔者对newfilepath使用remove()删除旧文件之后再进行rename(),ret 返回 0,文件重命名成功。
remove();
需要注意的是,在对打开中的文件重命名和删除之前,要使用fclose关闭该文件,否则会报错。



