【C语言学习】22 -文件管理

1 remove()函数

1.1 函数原型

remove():删除文件,函数原型如下:

int remove(const char *filename);

1.2 参数

remove()函数只有一个参数filename:

  1. 参数filename是一个指向待删除文件的文件名的指针,类型为char*。

1.3 返回值

remove()函数返回值类型为int型:

  1. 删除成功,返回0值;
  2. 删除失败,返回非0值。

文件删除失败的原因可能有:

  1. 文件已打开;
  2. 文件不存在;
  3. 文件为只读;
  4. 文件没有足够的访问权限。

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:

  1. 参数old_filename是一个指向旧文件名的指针,类型为char*;
  2. 参数new_filename是一个指向新文件名的指针,类型为char*。

2.3 返回值

rename()函数的返回值类型为int型:

  1. 修改成功,返回返回0;
  2. 修改失败,返回非0值。

文件名修改失败的原因可能有:

  1. oldname文件不存在;
  2. newname文件已存在;
  3. 试图将文件重命名至另一个目录下。

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函数说明:

  1. file_copy函数既可以拷贝文本文件,也可以拷贝二进制文件;
  2. file_copy函数二进制形式(wb、rb)打开文件进行读写;
  3. file_copy函数使用fread()函数以固定字节数(1024字节)读文件;
  4. file_copy函数使用fwrite()函数根据实际读取的字节数写文件;
  5. file_copy函数根据fread()函数从文件读取的字节数是否为0判断文件是否已读空。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值