文件操作(下)

简介: 文件操作(下)

一. 文本文件和二进制文件


根据数据的组织形式,数据文件被称为文本文件或者二进制文件。

数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。

如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文

本文件。


我们还是直接上代码


#include <stdio.h>
int main()
{
 int a = 10000;
 FILE* pf = fopen("test.txt", "wb");
 fwrite(&a, 4, 1, pf);//二进制的形式写到文件中
 fclose(pf);
 pf = NULL;
 return 0; }


6cd72547ac4446d5b09c784e53b0827a.png

我们可以发现 以txt格式打印出来之后是一堆乱码


我们再用二进制形式打开这个文件


4cda0aa82da24c6db5ff317e9bd12147.png


我们可以发现 它可以转换成 0x 00 00 27 10格式


二. 文件读取结束的判定


这里提供三种文件读取的结束标志


fgetc判断是否为 EOF


fgets 判断返回值是否为null


二进制文件fread 判断返回值是否小于要读的个数


这里给出二进制的判断代码 如果返回值不等于返回值 则表示读取失败


enum { SIZE = 5 };
int main(void) {
    double a[SIZE] = {1.,2.,3.,4.,5.};
    FILE *fp = fopen("test.bin", "wb"); // 必须用二进制模式
    fwrite(a, sizeof *a, SIZE, fp); // 写 double 的数组
    fclose(fp);
    double b[SIZE];
    fp = fopen("test.bin","rb");
    size_t ret_code = fread(b, sizeof *b, SIZE, fp); // 读 double 的数组
    if(ret_code == SIZE) {
        puts("Array read successfully, contents: ");
        for(int n = 0; n < SIZE; ++n) printf("%f ", b[n]);
        putchar('\n');
   } else { // error handling
       if (feof(fp))
          printf("Error reading test.bin: unexpected end of file\n");
       else if (ferror(fp)) {
           perror("Error reading test.bin");
       }
   }
    fclose(fp);
}


三. 文件缓冲区


这里我们先给定义


ANSIC 标准采用“缓冲文件系统”处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序

中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装

满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓

冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的大小根

据C编译系统决定的。


int main()
{
  FILE* pf = fopen("test.txt", "w");
  fputs("abcdef", pf);//先将代码放在输出缓冲区
  printf("睡眠10秒-已经写数据了,打开test.txt文件,发现文件没有内容\n");
  Sleep(10000);
  printf("刷新缓冲区\n");
  fflush(pf);//刷新缓冲区时,才将输出缓冲区的数据写到文件(磁盘)
  //注:fflush 在高版本的VS上不能使用了
  printf("再睡眠10秒-此时,再次打开test.txt文件,文件有内容了\n");
  Sleep(10000);
  fclose(pf);
  //注:fclose在关闭文件的时候,也会刷新缓冲区
  pf = NULL;
  return 0;
}


我们先将test.txt的所有内容清空


然后我们输入


fputs("abcdef", pf);//先将代码放在输出缓冲区


我们打开文件 发现文件并没有被改变


  fflush(pf);//刷新缓冲区时,才将输出缓冲区的数据写到文件(磁盘)


只有再执行这段代码之后 刷新文件缓冲区


之后文件就会有内容了


所以说我们这里能够得到一个结论!


**

因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文

件。

如果不做,可能导致读写文件的问题。**


以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏 希望大佬们看到错误之后能够


不吝赐教 在评论区或者私信指正 博主一定及时修正


那么大家下期再见咯

相关文章
|
7月前
|
存储 C语言 Windows
文件操作(上)
文件操作(上)
27 0
|
2天前
|
存储 程序员 编译器
文件操作详解
文件操作详解
28 0
|
30天前
|
C语言
文件操作(2)
文件操作(2)
29 3
|
30天前
|
存储 程序员 编译器
文件操作(1)
文件操作(1)
31 2
|
1月前
|
弹性计算 运维 Shell
文件操作
【4月更文挑战第30天】
25 0
|
8月前
|
程序员 C语言 Windows
【文件操作】
【文件操作】
27 0
|
1月前
|
存储 Java C语言
文件操作你会了吗
文件操作你会了吗
48 0
|
7月前
|
程序员 编译器 C语言
文件操作(中)
文件操作(中)
22 0
|
10月前
|
存储 编译器 Windows
【C】文件操作详解
什么是文件 磁盘上的文件是文件。 但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件
超详细的文件操作讲解
各位朋友们,大家好啊,今天我要分享的是关于文件操作方面的知识。