【C语法学习】fopen()函数

文章目录

  • 1 函数原型
  • 2 返回值
  • 3 参数
    • 3.1 文件名
    • 3.2 模式
      • 3.2.1 以"r"模式打开
      • 3.2.2 以"w"模式打开
      • 3.2.3 以"a"模式打开
      • 3.2.4 以"r+"模式打开
      • 3.2.5 以"w+"模式打开
      • 3.2.6 以"a+"模式打开

1 函数原型

fopen():创建并打开与文件相关联的文件流,函数原型如下:

FILE *fopen(const char *filename, const char *mode);

2 返回值

返回值类型是一个指向FILE类型的指针,FILE是个结构:

  1. 打开文件成功,则创建一个FILE类型结构的实例,并返回指向该结构实例的指针,程序使用该指针来操作文件;
  2. 打开文件失败,则返回NULL;导致文件打开失败的原因有很多,如:
    (1)使用无效的文件名;
    (2)试图在未准备好的磁盘上打开文件(如磁盘未格式化);
    (3) 文件的目录或盘符不存在;
    (4) 以"r"和"r+"模式打开文件。

3 参数

fopen()函数有两个参数:文件名(filename)和模式(mode)。

3.1 文件名

一个文件需要有唯一确定的文件名,以便用户根据文件名找到唯一确定的文件,方便用户对文件的识别和引用。

文件名由三部分组成,文件路径+文件名主干+文件扩展名,如下图所示:

例如:c:\data\list.txt

1. 文件路径:"c:\data\";
2. 文件名:"list";
3. 文件扩展名:".txt";

注意:
4. 使用反斜杠'\'来分隔文件路径中的目录名;
5. C程序中,文件名以字符串的形式存储;
6. C程序中,反斜杠'\'被用作转义字符,标志着转义序列的开始;
7. C程序中,需要用两个反斜杠"\\"来表示文件路径中的目录分隔符'\',如"c:\\data\\list.txt";当从键盘输入文件名时,只需键入一个反斜杠'\';
8. C程序中,路径可省略,此时默认待打开的文件和当前C程序位于同一个目录下;

3.2 模式

模式指定以何种方式打开文件。具体而言,模式控制打开的是文本文件还是二进制文件,是以只读方式打开,只写方式打开。还是读写的方式打开。

以打开文本文件为例,不同打开模式的含义如下图所示:
在这里插入图片描述
当打开二进制文件时,模式为rb、wb、ab、rb+、wb+和ab+,模式的含义都一样。

3.2.1 以"r"模式打开

以"r"模式打开文件"1.txt",代码如下图所示:

int main()
{
   FILE* fp = NULL;

   if ((fp = fopen("1.txt", "r")) == NULL)
   {
      printf("Failed to open file in \"r\" mode.\n");
      exit(1);
   }
   else
   {
      printf("Success to open file in \"r\" mode.\n");
      fclose(fp);
   }

   return 0;
}

当文件不存在时,在"r"模式下,打开文件失败,代码运行结果如下图所示:
在这里插入图片描述

当文件存在时,在"r"模式下,打开文件成功,代码运行结果如下图所示:
在这里插入图片描述

3.2.2 以"w"模式打开

以"w"模式打开文件"2.txt",代码如下图所示:

int main()
{
   FILE* fp = NULL;

   if ((fp = fopen("2.txt", "w")) == NULL)
   {
      printf("Failed to open file in \"w\" mode.\n");
      exit(1);
   }
   else
   {
      printf("Success to open file in \"w\" mode.\n");
      for (int i = 0; i < 10; i++)
      {
         fputc('2', fp);
      }
      fclose(fp);
   }

   return 0;
}

当文件不存在时,在"w"模式下,创建新文件,代码运行结果和文件内容如下图所示:
在这里插入图片描述
在这里插入图片描述

当文件存在时,在"w"模式下,清空文件内容,修改代码往文件中写入5个a,代码运行结果和文件内容如下图所示:
在这里插入图片描述
在这里插入图片描述

3.2.3 以"a"模式打开

以"a"模式打开文件"3.txt",代码如下图所示:

int main()
{
   FILE* fp = NULL;

   if ((fp = fopen("3.txt", "a")) == NULL)
   {
      printf("Failed to open file in \"w\" mode.\n");
      exit(1);
   }
   else
   {
      printf("Success to open file in \"w\" mode.\n");
      for (int i = 0; i < 10; i++)
      {
         fputc('3', fp);
      }
      fclose(fp);
   }

   return 0;
}

当文件不存在时,在"a"模式下,创建新文件,代码运行结果和文件内容如下图所示:
在这里插入图片描述
在这里插入图片描述

当文件存在时,在"a"模式下,新数据被附加至文件末尾,代码运行结果和文件内容如下图所示:
在这里插入图片描述
在这里插入图片描述

3.2.4 以"r+"模式打开

以"r+“模式打开文件"4.txt”,代码如下图所示:

int main()
{
   FILE* fp = NULL;

   if ((fp = fopen("4.txt", "r+")) == NULL)
   {
      printf("Failed to open file in \"r+\" mode.\n");
      exit(1);
   }
   else
   {
      printf("Success to open file in \"r+\" mode.\n");
      for (int i = 0; i < 10; i++)
      {
         fputc('4', fp);
      }
      fclose(fp);
   }

   return 0;
}

当文件不存在时,在"r+"模式下,打开文件失败,代码运行结果如下图所示:
在这里插入图片描述

当文件存在时,在"r+"模式下,新数据从头开始覆盖现有数据,假设文件初始内容为20个b,代码运行结果和文件内容如下图所示:
在这里插入图片描述
在这里插入图片描述

3.2.5 以"w+"模式打开

以"w+“模式打开文件"5.txt”,代码如下图所示:

int main()
{
   FILE* fp = NULL;

   if ((fp = fopen("5.txt", "w+")) == NULL)
   {
      printf("Failed to open file in \"w+\" mode.\n");
      exit(1);
   }
   else
   {
      printf("Success to open file in \"w+\" mode.\n");
      for (int i = 0; i < 10; i++)
      {
         fputc('5', fp);
      }
      fclose(fp);
   }

   return 0;
}

当文件不存在时,在"w+"模式下,创建新文件,代码运行结果和文件内容如下图所示:
在这里插入图片描述
在这里插入图片描述

当文件存在时,在"w+"模式下,清空文件内容,修改代码往文件中写入5个c,代码运行结果和文件内容如下图所示:
在这里插入图片描述
在这里插入图片描述

3.2.6 以"a+"模式打开

以"a+“模式打开文件"6.txt”,代码如下图所示:

int main()
{
   FILE* fp = NULL;

   if ((fp = fopen("6.txt", "a+")) == NULL)
   {
      printf("Failed to open file in \"a+\" mode.\n");
      exit(1);
   }
   else
   {
      printf("Success to open file in \"a+\" mode.\n");
      for (int i = 0; i < 10; i++)
      {
         fputc('6', fp);
      }
      fclose(fp);
   }

   return 0;
}

当文件不存在时,在"a+"模式下,创建新文件,代码运行结果和文件内容如下图所示:
在这里插入图片描述
在这里插入图片描述

当文件存在时,在"a+"模式下,新数据被附加至文件末尾,代码运行结果和文件内容如下图所示:
在这里插入图片描述
在这里插入图片描述

你可能感兴趣的:(c语言)