2024-2025-1 20241406刘书含第十二周学习总结

文件类型与存储方式

文本文件
文本文件是基于字符编码(如ASCII或UTF - 8)存储的文件。在文本文件中,每个字符都有对应的编码值。例如,字符'A'在ASCII码中对应的十进制值是65。
当使用文本编辑器打开文本文件时,会将这些编码值转换为可识别的字符显示出来。文本文件的内容可以被人类直接阅读和理解。例如,一个简单的包含“Hello, World!”的文本文件,存储的就是这些字符对应的编码。
二进制文件
二进制文件以二进制形式存储数据,不是以字符编码的方式。它可以存储各种类型的数据,如整数、浮点数、结构体等。

文件指针与FILE结构体

C语言通过文件指针来操作文件。文件指针是一个指向FILE结构体的指针。FILE结构体是在<stdio.h>头文件中定义的,它包含了文件操作所需的各种信息。
例如,文件指针的定义形式为FILE *fp;,这里fp就是文件指针变量。
2.
文件的打开与关闭操作
3.
文件打开函数fopen
o语法:FILE *fp = fopen("文件名","打开模式");。
o“文件名”参数指定要打开的文件名称。如果文件不在当前目录下,需要提供完整的路径。例如,在Windows系统下,"C:\Users\user\Documents\data.txt"指定了C盘用户文档文件夹下的data.txt文件“打开模式”决定了文件打开后的操作方式。常见的打开模式有:
"r":只读模式打开文本文件。如果文件不存在,fopen函数返回NULL,表示打开失败。
"w":只写模式打开文本文件。如果文件不存在,会创建新文件;如果文件存在,会清空文件内容。
"a":追加模式打开文本文件。如果文件不存在,会创建新文件;如果文件存在,会在文件末尾添加内容。
对于二进制文件,相应的模式有"rb"、"wb"、"ab",分别表示二进制文件的只读、只写、追加模式。
o例如,要打开一个当前目录下的文本文件test.txt用于读取,可以这样写:
o
文件关闭函数fclose
o语法:fclose(fp);,其中fp是通过fopen函数打开文件得到的文件指针。
o关闭文件的重要性在于确保缓冲区中的数据被正确写入文件,防止数据丢失。同时,及时关闭文件可以释放文件相关的系统资源,使系统能够更好地管理文件。例如,如果程序频繁打开文件而不关闭,可能会导致系统资源耗尽,影响其他程序的运行。

文件的读写操作

字符读写函数fgetc和fputc
fgetc函数
语法:int ch = fgetc(fp);,其中fp是文件指针。
功能:从文件指针fp指向的文件中读取一个字符。读取成功后,返回读取到的字符的ASCII码值。如果遇到文件末尾或者读取错误,返回EOF(EOF是在<stdio.h>中定义的常量,通常值为 - 1)。

ofputc函数
语法:fputc('A',fp);,这里将字符'A'写入文件指针fp指向的文件中。
功能:将一个字符写入文件。如果写入成功,返回写入的字符;如果写入失败,返回EOF。
字符串读写函数fgets和fputs
ofgets函数
语法:char str[100]; fgets(str, sizeof(str),fp);。
功能:从文件中读取一行字符串。它会读取最多sizeof(str) - 1个字符(因为要预留一个位置给字符串结束符'\0')到str数组中。
返回值:如果读取成功,返回str(即读取到的字符串的首地址);如果遇到文件末尾或者读取错误,返回NULL。例如,以下代码可以读取文件中的每一行并打印:

ofputs函数
语法:fputs("Hello World",fp);,将字符串“Hello World”写入文件(不包括字符串结束符'\0')。
功能:将一个字符串写入文件。如果写入成功,返回一个非负整数;如果写入失败,返回EOF。
格式化读写函数fscanf和fprintf
ofscanf函数
语法:fscanf(fp,"%d %s", &num, str);,从文件中按照指定格式读取数据。
功能:类似于scanf函数,用于从文件中读取数据。可以读取整数、浮点数、字符串等按照指定格式组合的数据。
返回值:如果成功读取了指定格式的数据,返回成功读取的项数;如果遇到文件末尾或者读取错误,返回EOF。
ofprintf函数
语法:fprintf(fp,"%d %s", num, str);,将数据按照指定格式写入文件。
功能:类似于printf函数,用于将数据写入文件。可以将整数、浮点数、字符串等按照指定格式组合的数据写入文件。
例如,若有一个结构体用于存储学生信息,包括学号和姓名,可以使用fscanf从文件中读取学生信息,使用fprintf将学生信息写入文件:


块读写函数fread和fwrite
ofread函数
语法:fread(&struct_var, sizeof(struct_var), 1,fp);,用于从文件中读取二进制数据块。
功能:从文件中读取一个数据块,数据块大小为sizeof(struct_var),读取的数量为1,存储到&struct_var地址处。常用于读取二进制文件中的结构体、数组等数据。
ofwrite函数
语法:fwrite(&struct_var, sizeof(struct_var), 1,fp);,用于将二进制数据块写入文件。
功能:将&struct_var地址处的数据块(大小为sizeof(struct_var))写入文件,写入数量为1。例如,将一个结构体数组写入二进制文件:

文件的定位操作

ftell函数
语法:long offset = ftell(fp);。
功能:获取文件指针fp的当前位置,返回值是一个长整型,表示文件指针相对于文件开头的偏移量(以字节为单位)。例如,在读取文件过程中,可以通过ftell函数记录当前读取位置。
fseek函数
语法:fseek(fp, offset, origin);,其中fp是文件指针,offset是偏移量(可以是正、负或零),origin是起始位置,有SEEK_SET(文件开头)、SEEK_CUR(文件当前位置)、SEEK_END(文件末尾)三种选择。
功能:用于移动文件指针的位置。例如,fseek(fp, 10L, SEEK_SET);会将文件指针从文件开头向后移动10个字节。这在随机读写文件时非常有用,比如在文件中间插入或修改数据。
rewind函数
语法:rewind(fp);。
功能:将文件指针重新定位到文件开头。当需要重新读取一个已经打开的文件的内容,或者对文件进行多次读写操作每次从开头开始时,可以使用rewind函数。例如,在一个文件中先读取数据用于统计,然后再读取数据用于打印,就可以在第二次读取前使用rewind函数将文件指针移回开头。

二进制文件操作:
C语言中的文件操作默认是文本模式,但可以通过在文件模式字符串前加上"b"(如"rb","wb")来以二进制模式打开文件。

缓冲区:

C语言中的文件操作默认是带缓冲的,这意味着数据可能不会立即写入磁盘,而是存储在内存中,直到缓冲区满或者显式调用fflush()。

文件权限:

在Unix/Linux系统中,文件权限可以通过chmod()函数设置。
这些是C语言文件操作的一些基础和重要的知识点。在实际编程中,正确地使用这些函数和理解它们的行为对于处理文件数据至关重要。
利用AI的学习

posted @ 2024-12-15 22:24  刘书含  阅读(6)  评论(0编辑  收藏  举报