【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)


相关文章
|
11天前
|
C语言
C语言——文件操作
本文介绍了文件的基本操作,包括文件的打开、关闭、读取和写入。使用`fopen`函数以不同模式(如“r”、“w”等)打开文件,并通过`fclose`关闭。文章详细解释了如何利用`fputc`、`fputs`及`fprintf`进行格式化写入,同时介绍了`fgetc`、`fgets`和`fscanf`用于文件内容的读取。此外,还涵盖了二进制文件的读写方法以及如何通过`fseek`、`ftell`和`rewind`实现文件的随机访问。
34 1
C语言——文件操作
|
24天前
|
存储 C语言
C语言程序设计核心详解 第十章:位运算和c语言文件操作详解_文件操作函数
本文详细介绍了C语言中的位运算和文件操作。位运算包括按位与、或、异或、取反、左移和右移等六种运算符及其复合赋值运算符,每种运算符的功能和应用场景都有具体说明。文件操作部分则涵盖了文件的概念、分类、文件类型指针、文件的打开与关闭、读写操作及当前读写位置的调整等内容,提供了丰富的示例帮助理解。通过对本文的学习,读者可以全面掌握C语言中的位运算和文件处理技术。
|
2月前
|
C语言
【C语言篇】文件操作(下篇)
因为有缓冲区的存在,C语⾔在操作⽂件的时候,需要做刷新缓冲区或者在⽂件操作结束的时候关闭⽂ 件。如果不做,可能导致读写⽂件的问题。
|
2月前
|
存储 API 数据处理
C语言中的文件操作
C语言中的文件操作
68 0
|
2月前
|
C语言 索引
【C语言】文件操作全解速览
【C语言】文件操作全解速览
31 0
|
2月前
|
存储 程序员 C语言
【C语言篇】文件操作(上篇)
在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)。
|
2月前
|
存储 编译器 程序员
【C语言】文件操作讲解
【C语言】文件操作讲解
|
4月前
|
C语言
C语言——文件操作
C语言——文件操作
47 2
C语言——文件操作
|
4月前
|
存储 程序员 编译器
文件操作(C语言)
文件操作(C语言)
|
4月前
|
存储 C语言 C++
【C语言基础】:文件操作详解(前篇:准备知识)
【C语言基础】:文件操作详解(前篇:准备知识)