C语言文件操作(下)

简介: C语言文件操作(下)

4.1 对比一组函数

1. #include <stdio.h>
2. #include <string.h>
3. #include <errno.h>
4. 
5. struct Stu
6. {
7.  char name[20];
8.  int age;
9.  double d;
10. };
11. 
12. int main()
13. {
14.   struct Stu s = { "张三", 20, 95.5 };
15.   struct Stu tmp = { 0 };
16.   char buf[100] = { 0 };
17.   sprintf(buf, "%s %d %lf\n", s.name, s.age, s.d);//把后面的内容,按照格式放到字符串buf中
18. 
19.   printf("%s\n", buf);
20.   sscanf(buf, "%s %d %lf", tmp.name, &(tmp.age), &(tmp.d));//把字符串buf里的内容放到后面
21.   printf("%s %d %lf", tmp.name, tmp.age, tmp.d);
22.   //关闭
23.   return 0;
24. }

scanf、fscanf、sscanf

printf、fprintf、sprintf

scanf 从标准输入流(stdin)上进行格式化输入的函数

printf向标准输出流(stdout)上进行格式化的输出函数

fscanf 可以从标准输入流(stdin)/指定的文件上读取格式化的数据

fprintf把数据按照格式化的方式输出到标准输出流(stdout)/指定的文件

sscanf 可以从一个字符串提取(转化)出格式化数据

sprintf 把一个格式化的数据转化成字符串

五 文件的随机读写

5.1 fseek

根据文件指针的位置和偏移量来定位文件指针。

int fseek ( FILE * stream , long int offset , int origin );

EILE* stream表示pf

long int offset表示偏移量

int origin有三种选择:SEEK_SET(这个表示起始位置)、SEEK_CUR(这个表示除了起始和末尾的位置)、SEEK_END(这个表示末位的位置)

读:

1. #include <stdio.h>
2. #include <string.h>
3. #include <errno.h>
4. 
5. 
6. int main()
7. {
8.  FILE* pf = fopen("text.txt", "r");
9.  if (pf == NULL)
10.   {
11.     printf("%s\n", strerror(errno));
12.     return 0;
13.   }
14. 
15.   //读文件
16.   int ch = fgetc(pf);
17.   printf("%c\n", ch);//a
18.   ch = fgetc(pf);
19.   printf("%c\n", ch);//b 如果不加干预的话,下次获取出来的就是c,
20.   //定位指针文件
21.   //用fseek可以直接让pf定位到f
22.   //fseek(pf, 3, SEEK_CUR);//方法一:直接让pf定位到f
23.   //fseek(pf, 5, SEEK_SET);//方法二:也可以直接让pf定位到f,这里的SEEK_SET表示起始位置
24.   fseek(pf, -1, SEEK_END);//方法三:也可以直接让pf定位到f,这里的SEEK_END表示末尾位置
25.   ch = fgetc(pf);
26.   printf("%c\n", ch);//f
27. 
28.   //关闭文件
29.   fclose(pf);
30.   pf = NULL;
31.   return 0;
32. }

打印结果;abf

写:

1. #include <stdio.h>
2. #include <string.h>
3. #include <errno.h>
4. int main()
5. {
6.  FILE* pf = fopen("text.txt", "w");
7.  if (pf == NULL)
8.  {
9.    printf("%s\n", strerror(errno));
10.     return 0;
11.   }
12.   //写文件
13.   int ch = 0;
14.   for (ch = 'a'; ch < 'z'; ch++)
15.   {
16.     fputc(ch, pf);
17.   }
18.   fseek(pf, -1, SEEK_END);//直接让pf定位到z,这里的SEEK_END表示末尾位置
19.   fputc('#', pf);
20. 
21. 
22.   //关闭文件
23.   fclose(pf);
24.   pf = NULL;
25.   return 0;
26. }

打印:

5.2 ftell

返回文件指针相对于起始位置的偏移量

long int ftell ( FILE * stream ); 返回的是偏移量的值,即偏移量是多少(偏移量从0开始)

5.3 rewind

让文件指针的位置回到文件的起始位置。

void rewind ( FILE * stream ); (文件指针回到起始位置)

六 文本文件和二进制文件

 数据文件被称为 文本文件 或者二进制文件。 数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是 二进制文件(我们看不懂的文件) 。 如果要求在外存上以 ASCII 码的形式存储,则需要在存储前转换。以 ASCII 字符的形式存储的文件就是 文本文件。

字符一律以 ASCII 形式存储,数值型数据既可以用 ASCII 形式存储,也可以使用二进制形式存储。

七 文件读取结束的判断

7.1 被错误使用的feof

在文件读取过程中,不能用 feof 函数的返回值直接用来判断文件的是否结束。

而是 应用于当文件读取结束的时候,判断是读取失败结束,还是遇到文件尾结束 。

1. 文本文件读取是否结束,判断返回值是否为 EOF ( fgetc ),或者 NULL ( fgets )

例如:fgetc 判断是否为 EOF .   fgets 判断返回值是否为 NULL .

2. 二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。

例如:fread 判断返回值是否小于实际要读的个数。

(fgetc(字符)fgets(文本)fread(二进制))

八 文件缓冲区

     ANSIC 标准采用 “ 缓冲文件系统 ” 处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序 中每一个正在使用的文件开辟一块 “ 文件缓冲区 ” 。从内存向磁盘输出数据会先送到 内存中 的缓冲区,装 满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓 冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的大小根 据 C 编译系统决定的。

 因为有缓冲区的存在, C 语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文 件。 如果不做,可能导致读写文件的问题。

关闭文件,会刷新缓冲区

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