1 remove()函数
1.1 函数原型
remove():删除文件,函数原型如下:
int remove(const char *filename);
1.2 参数
remove()函数只有一个参数filename:
- 参数filename是一个指向待删除文件的文件名的指针,类型为char*。
1.3 返回值
remove()函数返回值类型为int型:
- 删除成功,返回0值;
- 删除失败,返回非0值。
文件删除失败的原因可能有:
- 文件已打开;
- 文件不存在;
- 文件为只读;
- 文件没有足够的访问权限。
C语言标准描述如下:
1. 0 upon success or non-zero value on error.
1.4 示例
使用remove()函数删除文件,示例代码如下所示:
int main()
{
//
char filename[80] = { 0 };
char check[20] = { 0 };
//
while (1)
{
//
printf("请输入要删除的文件名:");
gets(filename);
//
printf("请确认是否要删除文件(确认删除输入是,否则输入否):");
gets(check);
//
if (strcmp(check, "是") == 0)
{
if (remove(filename) == 0)
{
printf("Success to delete file %s.\n", filename);
break;
}
else
{
printf("Failed to delete file %s.\n", filename);
}
}
}
return 0;
}
代码运行结果如下图所示:
2 rename()函数
2.1 函数原型
rename():修改文件的文件名,函数原型如下:
int rename(const char *old_filename, const char *new_filename);
2.2 参数
rename()函数有两个参数old_filename和new_filename:
- 参数old_filename是一个指向旧文件名的指针,类型为char*;
- 参数new_filename是一个指向新文件名的指针,类型为char*。
2.3 返回值
rename()函数的返回值类型为int型:
- 修改成功,返回返回0;
- 修改失败,返回非0值。
文件名修改失败的原因可能有:
- oldname文件不存在;
- newname文件已存在;
- 试图将文件重命名至另一个目录下。
C语言标准描述如下:
1. 0 upon success or non-zero value on error.
2.4 使用说明
rename()函数修改文件名唯一的限制就是新旧文件名引用的文件必须位于相同的目录下。
2.5 示例
使用rename()函数修改文件名,示例代码如下所示:
int main()
{
//
char oldname[80] = { 0 };
char newname[80] = { 0 };
//
printf("Enter old filename : ");
gets(oldname);
printf("Enter new filename : ");
gets(newname);
//
if (rename(oldname, newname) == 0)
{
printf("File %s has been renamed to %s.\n", oldname, newname);
}
else
{
printf("Failed to rename file %s.\n", oldname);
}
return 0;
}
代码运行结果如下:
3 拷贝文件
C语言没有用于拷贝文件的库函数,需要程序员自己实现,示例代码如下所示:
int file_copy(char* src_file_name, char* des_file_name)
{
//
FILE* srcfp = fopen(src_file_name, "rb");
FILE* desfp = fopen(des_file_name, "wb");
//
if (srcfp == NULL)
{
printf("无法打开源文件\n");
return -1;
}
if (desfp == NULL)
{
printf("无法打开目标文件\n");
fclose(srcfp);
return -1;
}
//
char buffer[1024] = { 0 };
unsigned int bytesread = 0;
while ((bytesread = fread(buffer, sizeof(char), sizeof(buffer), srcfp)) > 0)
{
fwrite(buffer, sizeof(char), bytesread, desfp);
}
//
fclose(srcfp);
fclose(desfp);
//
return 0;
}
int main()
{
//
char src_file_name[80] = { 0 };
char des_file_name[80] = { 0 };
//
printf("Enter source filename : ");
gets(src_file_name);
printf("Enter destination filename : ");
gets(des_file_name);
//
if (file_copy(src_file_name, des_file_name) == 0)
{
printf("Success to copy %s to %s.\n", src_file_name, des_file_name);
}
else
{
printf("Failed to copy %s to %s.\n", src_file_name, des_file_name);
}
return 0;
}
file_copy函数说明:
- file_copy函数既可以拷贝文本文件,也可以拷贝二进制文件;
- file_copy函数二进制形式(wb、rb)打开文件进行读写;
- file_copy函数使用fread()函数以固定字节数(1024字节)读文件;
- file_copy函数使用fwrite()函数根据实际读取的字节数写文件;
- file_copy函数根据fread()函数从文件读取的字节数是否为0判断文件是否已读空。