【C语言】文件和文件操作。

目录

一,什么是文件?

1,为什么使用文件?

2,文件的特征和属性

二,二进制文件和文本文件的区别

三,文件的相关操作:

1,文件的打开和关闭:

2,文件的读写:

1,顺序读写:

用法简介:

2,随机读写(fseek)

四,文件读取结束的判定

被错误使用的  feof


一,什么是文件?

1,为什么使用文件?

在计算机编程中,文件是数据的有序集合,是计算机中用于存储数据的一种基本单位。它是一个命名的、有序的数据集合,如果不使用文件,数据存储在内存中,当程序退出或掉电时,数据就丢失了,而如果使用了文件,数据就会通常以二进制形式存储在计算机的长久性存储介质上,这样的话,数据就不会因为程序退出或掉电而丢失例如硬盘驱动器、固态驱动器、光盘、磁盘等。文件可以包含各种不同类型的数据,例如文本、图像、音频、视频、程序代码等。在C语言中,文件是通过文件指针来表示和操作的。

2,文件的特征和属性

  • 文件名:每个文件都有一个唯一的名称,用于在文件系统中标识和访问文件。文件名通常由字母、数字、下划线和其他字符组成,可以包括文件扩展名以指示文件的类型。
  • 文件类型:文件可以分为不同的类型,包括文本文件,图像文件,音频文件,可执行文件等。
  • 文件大小:文件的大小表示文件中包含的数据量,通常以字节为单位。
  • 文件路径:文件路径是指文件在文件系统中的位置。
  • 文件权限:文件可以有不同的权限,用于控制对文件的访问。包括读取,写入和执行权限等。
  • 创建日期和修改日期:通常记录了它的创建日期和最后修改日期,以便追踪文件的历史。

二,二进制文件和文本文件的区别

根据数据组织方式,数据文件被分为文本文件二进制文件。

顾名思义,文本文件是用来存储文本信息的文件通常使用字符编码(如ASCII或UTF-8)来存储文本字符。这意味着文本文件包含人类可读的文本,其中包括字母、数字、标点符号等。而二进制文件则是用来存储二进制信息的文件,数据以二进制形式表示,其中包括字节序列,可以包含任何类型的数据,如图像、音频、编译的程序代码等。这些数据不一定是人类可读的。

例如整数10000。它的二进制编码是:

0010 0111 0001 0000

数据以二进制的形式存储(小端字节序):

10     27     00     00

数据以ASCII码的形式存储:

'1'     '0'     '0'     '0'     '0'    (即10000)。

三,文件的相关操作:

在介绍相关操作之前,我们先了解一下文件指针:

文件指针是一个指向文件的指针,它用于跟踪文件的位置和状态。C语言使用 FILE 结构来表示文件指针,可以通过声明 FILE 类型的指针来创建文件指针变量。

例如:

FILE *filePointer;

1,文件的打开和关闭:

文件打开

在C语言中,你可以使用fopen函数来打开文件。fopen函数接受两个参数:文件名和打开模式。

其中,打开模式有以下几种:

  • "r":表示只读(文件必须存在)。
  • "w":写入(如果文件存在,则清除文件内容,如果不存在,则新建一个空文件)。
  • "a":追加(如果文件存在,则在文件末尾添加数据)。
  • "rb":二进制模式下的只读。
  • "wb":二进制模式下的写入。
  • "ab":二进制模式下的追加。

例如,fopen要以只读方式打开一个名为 data.txt 的文件:

FILE *file = fopen("data.txt", "r");
if (file == NULL) {
    perror("fopen");   //如果打开文件失败,显示错误信息。
    return 1;
}

文件关闭

在完成文件操作后,务必使用 fclose 函数关闭文件,以释放资源并确保数据被写入磁盘。

例如:

fclose(file);
file = NULL;

2,文件的读写:

1,顺序读写:

用到的函数名和功能如下表所示:

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

fputc 和 fputc ,这两个函数通常用于文本文件的逐字符读写。

int ch = fgetc(file); // 从文件中读取一个字符
fputc(ch, file);      // 将字符写入文件

fgets fputs ,这两个函数通常用于文本文件的逐行读写。

char arr[100];
fgets(arr, sizeof(arr), file);    // 从文件中读取一行
fputs(arr, file);                 // 将字符串写入文件

fscanf fprintf ,这两个函数通常用于二进制文件的读写。

int value;
fscanf(file, "%d", &value);              // 从文件中按格式读取整数
fprintf(file, "The value is %d", value); // 按格式将整数写入文件

fread fwrite ,这对函数用于按格式读取和写入文件,通常用于解析和生成格式化的文本数据。

char arr[100];
fread(arr, sizeof(char), 100, file);  // 从文件中读取100个字节
fwrite(arr, sizeof(char), 100, file); // 将100个字节写入文件

2,随机读写(fseek)

fseek fseek 函数用于设置文件指针的位置,以便在文件中移动到指定的位置。你可以使用 fseek 定位文件指针,然后使用顺序读写函数进行读写。

fseek(file, offset, origin); // 将文件指针移动到指定位置

其中:

  • file:文件指针。
  • offset:相对于 origin 参数的偏移量。
  • origin:可以是 SEEK_SET(文件开始)、SEEK_CUR(当前位置)或 SEEK_END(文件末尾)。

四,文件读取结束的判定

被错误使用的  feof

feof(),它返回非零值(true)表示文件已结束,返回零值(false)表示文件还未结束。

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

feof 的作用是:当文件读取结束的时候判断读取结束的原因是否是遇到文件尾结束。

其结束原因可能有两种:

1,文件遇到末尾。

2,文件读取错误

正确的的判定方式可以使用 fopen 的返回值。

如:

FILE* file = fopen("example.txt", "r");
if (file) {
    int ch;
    while ((ch = fgetc(file)) != EOF) {
        // 读取文件内容
    }
        // 在这里,如果不再执行读取操作,文件已结束
    fclose(file);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值