欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

C语言之文件操作

最编程 2024-08-13 09:16:09
...

文件的打开和关闭

文件再读写之前应该先打开文件,在使用结束之后应该关闭文件。

在编写程序的时候,再打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。

ANSIC规定使用fopen函数来打开文件,使用fclose来关闭文件。


FILE * fopen(const char * filename, const char * mode);//mode是打开方式

int fclose (FILE * stream);


打开方式如下:

文件使用方式 含义 如果指定文件不存在
“r"(只读) 为了输入数据,打开一个已经存在的文本文件 出错
“w”(只写) 为了输入数据,打开一个文本文件 建立一个新的文件
“a”(追加) 向文本文件尾添加数据 出错
“rb”(只读) 为了输入数据,打开一个二进制文件 出错
“wb”(只写) 为了输出数据打开一个二进制文件 建立一个新的文件
“ab”(追加) 向二进制文件尾添加数据 出错
“r+”(读写) 为了读和写,打开一个文本文件 出错
“w+”(读写) 为了读和写,建立一个新的文件 建立一个新的文件
“a+”(读写) 打开一个文件,在文件尾进行读写 建立一个新的文件
“rb++”(读写) 为了读和写打开一个二进制文件 建立一个新的文件
“ab+”(读写) 打开一个二进制文件,在文件尾进行读和写 建立一个新的文件

文件打开

#include<stdio.h>
int main()
{
  //打开文件test.txt
  //相对路径(即相对于当前的代码在哪个路径底下)
  //..表示上一级路径
  //. 表示当前路径
  //fopen("../test.txt","r");
  //fopen("../../test.txt","r");
  //fopen("test.txt","r");
  //绝对路径的写法
  //fopen("D:\\vs\code\\101\\C语言-文件操作\\C-文件操作(1)-22-12-1\\test.txt", "r");
  return 0;
}


“r”

#include<stdio.h>
#include<errno.h>
#include<string.h>
int main()
{
  FILE* pf = fopen("test.txt", "r");
  if (pf == NULL)
  {
  {
    printf("%s", strerror(errno));
    return 0;
  }
  }
  //来到这里就说明打开成功了
  //读文件
  //关闭文件
  fclose(pf);//pf的类型就是FILE*
  //fclose就是把文件关闭掉,把FILE这个结构体所指向的文件关闭掉,把这个资源释放掉
  //但是此时pf并没有置成空指针,对于fclose(pf)属于值传递,并没有改变pf
  //所以我们就需要把pf置成空指针
  pf = NULL;
  return 0;
}

网络异常,图片无法展示
|

我们发现其实并没有成功打开文件,原因就是No such file or directory,即没有这个文件或者文件夹。

我们在前面的表格中可以知道,"r"(只读)如果指定文件不存在的话会出错。

所以我们需要创建test.txt文件之后再来运行程序:

网络异常,图片无法展示
|

此时我们来运行程序:

网络异常,图片无法展示
|

屏幕上什么都没有显示就说明打开文件成功了。


“w”

我们先把刚刚创建的test.txt文件删除掉。

因为如果以"w"(只写)的方式来打开文件时,如果指定文件不存在,会新建一个文件。

网络异常,图片无法展示
|

现在用只写的方式来打开文件:

网络异常,图片无法展示
|

说明程序打开成功了,我们再来看一看到底有没有创建test.txt文件。

6.png

这里的确创建了一个新的文件,在这个路径底下就自动生成test.txt文件。

注意有一个小细节

现在我们给test.txt文件中放入"abcdef",即:

7.png

8.png


现在我们来运行程序:

9.png

10.png

11.png

12.png


当我们再次查看test.txt文件时发现文件是空的。

那为什么会出现这种情况呢?原因是:我们通过"w"(只写)来打开文件时,会新建一个文件出来,那么旧的那个、先前的那个文件里的内容就销毁掉了。即指定的文件存在与否都会新建一个文件。

文件的顺序读写

功能 函数名 适用于
字符输入函数 fgetc 所有输入流
字符输出函数 fputc 所有输出流
文本行输入函数 fgets 所有输入流
文本行输出函数 fputs 所有输出流
格式化输入函数 fscanf 所有输入流
格式化输出函数 fprintf 所有输出流
二进制输入 fread 文件
二级制输出 fwrite 文件


字符输入输出函数fgetc和fputc

fputc

#include<stdio.h>
#include<string.h>
#include<errno.h>
int main()
{
  FILE* pfwrite = fopen("test.txt", "w");//pfwrite所指向的流是文件输出流,即我们要向文件里面写东西
  if (pfwrite == NULL)
  {
  printf("%s\n", strerror(errno));
  }
  //写文件
  fputc('h', pfwrite);
  fputc('e', pfwrite);
  fputc('l', pfwrite);
  fputc('l', pfwrite);
  fputc('o', pfwrite);
  //关闭文件
  fclose(pfwrite);
  pfwrite = NULL;
  return 0;
}