文章目录
- 一、函数定义
- 1.1 函数的简单说明
- 二、实例
- 2.1 文件重命名
- 2.2 (文件重命名)运行结果
- 2.3 文件移动并重命名(验证)
- 2.4 (文件移动并重命名)运行结果
一、函数定义
#include <stdio.h>int rename(const char *oldpath, const char *newpath);#include <fcntl.h> /* Definition of AT_* constants */
#include <stdio.h>int renameat(int olddirfd, const char *oldpath,int newdirfd, const char *newpath);
1.1 函数的简单说明
- 这两个函数都是对文件(包括符号链接,而不是符号链接指向的文件)、文件夹进行重命名【Linux里重命名可以对文件(文件夹)进行移动】。
- 当newpath已经存在的情况下,文件会进行覆盖(权限允许)。文件夹则会删除原来的文件夹(原来的文件夹必须为空),再重命名。
二、实例
2.1 文件重命名
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>int main(int argc, char **args)
{if (rename("test", "hotice0") < 0) {perror("rename test to hotice0 with fail");exit(-1);}return 0;
}
2.2 (文件重命名)运行结果
// 重命名文件
hotice0@ubuntu:~/Documents/Unix_Program$ echo "hotice0" > hotice0
hotice0@ubuntu:~/Documents/Unix_Program$ echo "test" > test
hotice0@ubuntu:~/Documents/Unix_Program$ ./rename_renameat
hotice0@ubuntu:~/Documents/Unix_Program$ cat hotice0
test
hotice0@ubuntu:~/Documents/Unix_Program$ cat test
cat: test: No such file or directory
// 重命名文件夹
hotice0@ubuntu:~/Documents/Unix_Program$ mkdir hotice0
hotice0@ubuntu:~/Documents/Unix_Program$ echo "hotice0 file content" > hotice0/file
hotice0@ubuntu:~/Documents/Unix_Program$ mkdir test
hotice0@ubuntu:~/Documents/Unix_Program$ ./rename_renameat
rename test to hotice0 with fail: Directory not empty
可以看到如果newpath指定的文件夹中有文件时,rename则无法运行成功。
2.3 文件移动并重命名(验证)
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>int main(int argc, char **args)
{if (rename("test", "test_dir/hotice0") < 0) {perror("rename test to hotice0 with fail");exit(-1);}return 0;
}
2.4 (文件移动并重命名)运行结果
hotice0@ubuntu:~/Documents/Unix_Program$ echo "test" > test
hotice0@ubuntu:~/Documents/Unix_Program$ mkdir test_dir
hotice0@ubuntu:~/Documents/Unix_Program$ cat test_dir/hotice0
test