【C语言】文件操作

简介: 【C语言】文件操作

前言

本节课讲的是文件操作


提示:以下是本篇文章正文内容,下面案例可供参考

一、文件操作的大概过程

文件及文件操作介绍

什么是文件? 磁盘中的各种文件,图片文件(jpg,png,bmp,gif…),文本(doc,txt,dot,rtf,doct,wps,wpt, pdf,c,cpp,html,css,py…),其他(zip,7z,exe,msi,dll,lib,apk…)无数种文件类型,这些都是文 件,文件操作就是操作这些文件

不同的文件区别? 不同的文件存储的数据类型不同,文件内存储数据的格式不同

流程:操作流程:打开文件,读写操作,关闭文件

二、打开与关闭文件

打开文件:FILE * = fopen(“文件路径”,打开模式):旧 与errno_t = fopen_s(FILE*,“文件路径”,“打开模式”)函数:新

  //打开文件
  //旧
  FILE* pile1 = fopen("mytxt.txt", "r");
  //参数1:文件的路径(绝对/相对)参数2:打开方式
  //新
  FILE* pfile2 = NULL;//新版是通过传址调用,所以需要先定义FILE类型的指针
  errno_t e = fopen_s(&pfile2, "mytxt2.txt", "r");//参数1为传址调用,其他不变

FILE* 文件指针介绍:

FILE:文件类型,,就是文件指针,打开文件的本质就是将文件内容存进文件缓冲区,FILE 可以理解为文件缓冲区首地址。随着操作,文件指针偏移,指向哪儿就从哪儿开始操作。 返回值:旧函数直接返回文件操作地址。新函数通过参数 1 的传址调用获得文件地址


文件路径介绍:

相对路径:默认相对于项目文件所在目录,写个名字即可

绝对路径:完整路径名


打开方式介绍

文本模式: "r"/"rt" 只读,只能调用读函数,文件必须存在,否则失败。文件指针指向头字节。
"r+" 可读可写读,读写函数都能调用,文件必须存在,否则失败。文件指针指向头字节。 
"w"/"wt" 擦除写,只能调用写函数,文件不存在时创建文件。文件指针指向头字节。 
"w+" 可读可写,读写函数都能调用,文件不存在时创建文件。文件指针指向头字节。 
"a"/"at" 附加写,只能调用写函数,文件不存在时创建文件。文件指针指向尾字节。 
"a+" 可读可写,读写函数都能调用,文件不存在时创建文件。文件指针指向尾字节。 
二进制模式: "rb" 只读,只能调用读函数,文件必须存在,否则失败。文件指针指向头字节。
"rb+" 可读可写读,读写函数都能调用,文件必须存在,否则失败。文件指针指向头字节。 
"wb" 擦除写,只能调用写函数,文件不存在时创建文件。文件指针指向头字节。 
"wb+" 可读可写,读写函数都能调用,文件不存在时创建文件。文件指针指向头字节。
"ab" 附加写,只能调用写函数,文件不存在时创建文件。文件指针指向尾字节。
"ab+" 可读可写,读写函数都能调用,文件不存在时创建文件。文件指针指向尾字节。

二进制模式与文本模式的区别:对文件行结尾代码层面处理不同,在 windows 系统中,行结尾是\r\n,文本模式读到的是\n,二 进制模式读到的是\r\n 在 linux 系统下都是\n,没有区别。


fopen_s返回值介绍:

类型为erron_t


如果他的返回值不为0,则打开文件失败

if(e!=0&&pfile==NULL)//判断文件指针是否为NULL也是一种方法
{
  printf("文件打开失败\n");
}

关闭文件:fclose(FILE*)

为什么要关闭文件?

默认情况下不能打开两次

fclose(pfile);


三、读写操作fputc、fgetc、feof

fputc、fgetc


写入一个字节:int = fputc(字符,文件指针)

.int a = fputc('a', pfile2);//把参数1写入参数2的文件中,返回ascii整数

读取一个字节int = fgetc(文件指针);

.int b = fgetc(pfile2);//读取参数中一个字符,文件指向向下移动1格

返回值为读取出的字符的ascii整数,使用"%c"打印


注意:注意:取用r 写用a/w

int a = fputc('a', pfile2);//把参数1写入参数2的文件中,返回ascii整数
int b = fgetc(pfile2);//读取参数中一个字符,文件指向向下移动1格

feof

当读到文件结尾时,返回真

bool = feof(文件指针);

循环读文件

while (1) 
{ 
  int a = fgetc(pFile);
  if (feof(pFile))
      break;
  putchar(a); 
}


四、读写操作fputs、fgets

写入n个字节:fputs(要写入的字符串,文件指针)

读取n个字节:fgets(存储读取出来的字符串,读出的字节数,文件指针);


//读取n个字符
fputs("hello 文件操作", pfile2);//写入参数1到文件中
char str[20] = { '\0' };
fgets(str, 20, pfile2);//读取文件20个字符,存到str中

五、格式化读写字符串 fprintf,fscanf,fscanf_s

格式化写入字符串:fprintf(文件指针,“输出格式符”,数据) 把数据格式化后写入文件指针中,输出格式符要对应数据


格式化读取字符串:fscanf(文件指针,“输入格式符”,存储变量);

fscanf_s()---->与scanf和scanf_s的区别一样,字符串需要写字节数

  //写
  fprintf(pfile2, "a:%d, b:%lf,s:%s", 12, 45.6, "hello c3"); //格式化字符串写入文件
  //读
  int a = 0; 
  double b = 0.0; 
  char str[20] = { 0 }; 
  fscanf_s(pfile2, "a:%d, b:%lf,s:%s", &a, &b, str, 20); //成对使用,新版 
  fscanf(pfile2, "a:%d, b:%lf,s:%s", &a, &b, str); //老版
  //注意:读和写的格式化字符要对应

注意:读和写的格式化字符要对应,很重要,要不然会读乱

六、二进制读写数据fread、fwrite

什么场景使用他们:都是数据的时候

为什么要使用他们:比如 12 这个整数,前三组就是存入的字符 1 2 。而最后一组存 00001100 存入 1 字节。 所以数值类型的数据存储,可以直接使用 fread fwrite,比前三者效率高,因为前三者要 先转换,然后存


写入:fwrite(写入数据的地址,大小,写入的次数,文件指针);

读取:fread(存储数据的地址,大小,读取的次数,文件指针);

  struct Node
  {
    int a;
    double b;
    char c[10];
  };
  //写入结构体node
  struct Node node = { 10,20.22,"你好" };
  fwrite(&node, sizeof(node), 1, pfile2);//写入的结构体地址、结构体大小,写入的次数,文件指针
  //fread读取二进制到程序中
  //读取结构体node
  struct Node read_node;
  fread(&read_node, sizeof(read_node), 1, pfile2);//取出的结构体地址、结构体大小,读出                   的个数的次数,文件指针
  //打开文件看到的就是乱码了,但是在程序中看就是写入的东西了

七、文件操作函数

rewind

将文件指针指向文件首:

rewind(文件指针)

ftell

返回文件指针指向的文件中的字节下标

long = ftell(文件指针)

返回值为long类型,他为文件指针指向的下标

fseek

设置文件指针指向哪个字节,成功返回 0

fseek(文件指针,相对位置,从哪开始走)

参数3详解:

SEEK_SET 文件首,配合参数 2,比如 3,就是首+3 的位置,即第四个字节
SEEK_END 文件尾,配合参数 2,比如-3,就是结尾-3 的位置,即倒数第四个字节
 SEEK_CUR 当前位置,配合参数 2,负数左移,正数右移。

大家可以挑选自己需要的使用


总结

本文讲了:打开文件、路径是什么、打开模式的挑选、读写的几种方式(fputc、fgetc、fputs、fgets、fprintf、fscanf、fscanf_s以及二进制读写fread、fwrite)、文件操作函数(rewind、ftell、fseek)


相关文章
|
20天前
|
存储 C语言
【c语言】玩转文件操作
本文介绍了C语言中文件操作的基础知识,包括文件的打开和关闭、文件的顺序读写、文件的随机读写以及文件读取结束的判定。详细讲解了`fopen`、`fclose`、`fseek`、`ftell`、`rewind`等函数的使用方法,并通过示例代码展示了如何进行文件的读写操作。最后,还介绍了如何判断文件读取结束的原因,帮助读者更好地理解和应用文件操作技术。
27 2
|
1月前
|
存储 C语言
C语言文件操作(2)
【10月更文挑战第2天】
|
1月前
|
程序员 编译器 C语言
C语言底层知识------文件操作
本文详细介绍了文件操作的基本概念,包括文件的分类(程序文件和数据文件,其中着重于数据文件的文本文件和二进制文件),流的概念及其在C程序中的应用,以及标准输入输出流stdin、stdout和stderr的作用。作者通过示例展示了如何使用fopen、fclose和常见的读写函数如fgetc、fputc和fgets进行文件操作。
21 2
|
2月前
|
C语言
C语言——文件操作
本文介绍了文件的基本操作,包括文件的打开、关闭、读取和写入。使用`fopen`函数以不同模式(如“r”、“w”等)打开文件,并通过`fclose`关闭。文章详细解释了如何利用`fputc`、`fputs`及`fprintf`进行格式化写入,同时介绍了`fgetc`、`fgets`和`fscanf`用于文件内容的读取。此外,还涵盖了二进制文件的读写方法以及如何通过`fseek`、`ftell`和`rewind`实现文件的随机访问。
50 1
C语言——文件操作
|
1月前
|
存储 缓存 编译器
文件操作——C语言
文件操作——C语言
|
1月前
|
存储 C语言
简述C语言文件操作
简述C语言文件操作
11 0
|
1月前
|
存储 文件存储 C语言
深入C语言:文件操作实现局外影响程序
深入C语言:文件操作实现局外影响程序
|
1月前
|
存储 程序员 编译器
C语言文件操作(1)
【10月更文挑战第1天】
|
1月前
|
存储 C语言
C语言的文件操作
C语言的文件操作
21 0
|
1月前
|
存储 移动开发 Unix
C 语言文件操作详解
C 语言文件操作详解