一:读写的含义的解释:
读(读出):即从文件里面读出数据----------->和scanf从键盘里面读出数据类似
写(写入):即把数据写入文件里面----------->和printf把数据写入到屏幕上类似
二:使用读写函数的模型:
函数功能:用于打开一个文件,并返回一个与该文件关联的FILE
指针。
参数解释:
filename
:这是您想要打开的文件的名称(包括路径,如果文件不在当前目录下)。mode
:这是一个字符串,用于指定文件应如何被打开。例如,"r"表示只读模式,"w"表示写模式(如果文件不存在,则创建它;如果文件存在,则覆盖它),"a"表示追加模式(如果文件不存在,则创建它;如果文件存在,则在文件末尾追加内容),等等。
2,通过打开文件的返回值判断是否打开成功
函数功能:用于关闭一个已打开的文件。
参数解释:stream是需要被关闭的文件的文件指针
?:那为什么scanf printf的时候,直接使用就行了,不需要打开什么??
这是因为c语言程序,只要运行起来,就会默认打开3个流
1,标准输入流 stdin
2,标准输出流 stdout
3,标准错误流 stderr
三个流的类型依然是 FILE*,和读写函数的参数一致
函数功能:
将字符写入到文件中,写入一个字符后,文件的“当前位置”就会向前移动一个字符的位置。(将 int character 写入到 FILE * stream 中)
返回值:
- 函数返回一个
int
类型的值。如果写入成功,它返回写入的字符。如果发生错误,它返回EOF
(End Of File,文件结束标志)。
函数的使用展示:
第一种( 用fputc函数,将一个字符a写入到文件中,该文件名为data.txt)
第二种(用fputc函数,将英文字母表写入到文件中,该文件名为data.txt)
2:fgetc函数
函数功能:
从指定的文件流(stream)中读取一个字符
返回值:
返回该字符的 ASCII 值。如果文件流已经到达文件末尾,则返回 EOF
(End Of File,一个特殊的常量,通常在大多数系统中定义为 -1)。
函数的使用展示:
第一种( 用fgetc函数,从文件中获取一个字符,该文件名为data.txt)
data.txt文件统一为我们在vs路径下创建的一个英文字母表文本文件
第二种( 用fgetc函数,从文件中获取字母表的全部字符,该文件名为data.txt)
3:fputs函数
函数功能:
将字符串写入到指定的文件流中(将字符串str写入到文件流stream中)
返回值:
- 函数返回一个整数。如果成功,它将返回非负值(通常是
EOF
之外的任何值)。如果发生错误(例如,流是无效的或不可写的),则返回EOF
。
函数使用展示:
可知:该函数不会换行,需要自己加\n
4:fgets函数
函数功能:
从指定的文件流中读取一个字符串(从文件流stream中读取一个最大字符数为(num-1)的字符串str)
注意:
fgets
从stream
中读取字符,并将它们存储为 C 字符串到str
中,直到读取了(num-1)
个字符或遇到换行符(\n
)或文件结束符(EOF)为止,以先到者为准。- 如果遇到换行符,
fgets
会停止读取,但该换行符仍然被认为是有效的字符,并被包含在复制到str
的字符串中。 - 在复制到
str
的字符之后,fgets
会自动附加一个终止的空字符(\0
),以确保str
是一个有效的 C 字符串。
返回值:读取成功返回 str,
读取失败返回NULL
函数使用展示:
第一种:从data.txt中读取num为10,也就是num-1,9个字符,作为一个字符串str(注意中的第一点)
第二种:从data.txt中读取远远超过文件本身的字符长度,作为一个字符串str(注意中的第二点)
!:虽然100远远超过文件里的字符串长度,但是遇到 \n 就会自己停止读取
5:fprintf函数
函数功能:
将格式化的数据写入到指定的文件流中
参数解释:
const char *format
:这是一个格式字符串,指定了如何格式化后面的参数。格式字符串可以包含普通字符和格式说明符(以%
开头的子序列)。普通字符会被原样复制到输出流中,而格式说明符会被后面传入的参数替换。...
:这是一个可变参数列表,表示fprintf
函数可以接受任意数量的额外参数。这些参数的数量和类型应该与格式字符串中的格式说明符相匹配。
返回值:
-
On success, the total number of characters written is returned.
- 当操作成功时,返回写入的字符总数。
- 这意味着,如果你写入了5个字符,并且没有发生任何错误,那么该函数将返回5。
-
If a writing error occurs, the error indicator (ferror) is set and a negative number is returned.
- 如果在写入过程中发生错误,那么错误指示器(通常是一个变量或标志)将被设置,并且返回一个负数。
- 这种返回值可以帮助调用者(即使用该函数的代码)知道发生了错误,并且可以通过检查
ferror
来确定错误的具体原因。
函数使用展示:
将一个整数和一个浮点数写入到文件中
6:fscanf 函数
函数功能:
从文件中读取格式化的数据
参数解释:
-
**
const char *format
**:- 这是一个格式字符串,它指定了应该如何读取和解析数据。格式字符串中的格式说明符(如
%d
、%s
、%f
等)告诉fscanf
应该如何解释和存储数据。
- 这是一个格式字符串,它指定了应该如何读取和解析数据。格式字符串中的格式说明符(如
-
**
...
**:- 这表示函数接受可变数量的参数,这些参数是根据格式字符串中的格式说明符来指定的。
返回值:
-
成功时的返回:
- 当函数成功执行时,它会返回成功填充到参数列表中的项目数量。
- 这个数量可能与预期的项目数量相同,但也可能更少(甚至为零)。
-
为什么会比预期少:
- 匹配失败:可能是因为输入的数据与预期的格式或模式不匹配。
- 读取错误:在尝试读取数据时,可能会发生某种错误,如文件损坏或磁盘错误。
- 达到文件末尾:如果函数正在从文件中读取数据,并且已经到达了文件的末尾,那么它可能无法填充更多的项目。(一般这种原因居多)
-
关于错误指示:
- 如果在读取过程中发生读取错误或达到文件末尾,相应的标志(如
feof
或ferror
)会被设置。 - 如果在这些情况发生之前,函数还没有成功读取到任何数据,它会返回
EOF
(End Of File),这是一个特殊的值,表示文件结束或读取失败。
- 如果在读取过程中发生读取错误或达到文件末尾,相应的标志(如
函数使用展示:
把我们创建好的文件data.txt中的整数和浮点数放回一个结构体中
7:fwrite 函数
函数功能:
将数据块以二进制的形式写入文件流(fwrite
从由 ptr
指向的内存块中取出 count
个元素,每个元素的大小为 size
字节,并将它们写入到 stream
指向的文件流中)
参数解释:
ptr
:指向要写入的数据块的指针。这个数据块可以是任何类型,不仅仅是字符。size
:每个元素的大小(以字节为单位)。count
:要写入的数据元素的数量。stream
:指向要写入的文件流的指针。
返回值:
-
The total number of elements successfully written is returned.
- 这意味着该函数返回成功写入的元素总数。
-
If this number differs from the count parameter, a writing error prevented the function from completing.
- 如果返回的数量与传入的
count
参数不同,那么说明在写入过程中出现了错误,导致函数没有完成预期的写入操作。
- 如果返回的数量与传入的
-
In this case, the error indicator (ferror) will be set for the stream.
- 在出现写入错误的情况下,流的错误指示器(
ferror
)会被设置。这意味着您可以通过检查ferror
来确定是否发生了写入错误。
- 在出现写入错误的情况下,流的错误指示器(
-
If either size or count is zero, the function returns zero and the error indicator remains unchanged.
- 如果
size
或count
参数中的任何一个为零,那么函数将返回零,并且流的错误指示器不会改变。这意味着在这种情况下,没有发生错误,但也没有写入任何数据。
- 如果
函数使用展示:
从 s 中向 pf 中以二进制的形式写入 1 个大小为 sizeof(struct S) 的数据
8:fread 函数
函数功能:
从文件流中读取数据(fread
函数从给定的文件流 stream
中读取数据。它读取 count
个元素,每个元素的大小为 size
字节,并将这些数据存储在由 ptr
指向的内存块中)
参数解释:
void * ptr
:这是一个指向要存储读取数据的内存块的指针。fread
会将读取的数据存储在这个内存块中。size_t size
:每个要读取的元素的大小(以字节为单位)。size_t count
:要读取的元素数量。FILE * stream
:这是一个指向要从中读取数据的文件流的指针。
返回值:
-
The total number of elements successfully read is returned.
- 这意味着该函数返回成功读取的元素总数。
-
If this number differs from the count parameter, either a reading error occurred or the end-of-file was reached while reading.
- 如果返回的成功读取的元素总数与
count
参数不同,那么有两种可能的原因:- 读取过程中发生了错误。
- 在读取过程中已经到达了文件的末尾。
- 如果返回的成功读取的元素总数与
-
In both cases, the proper indicator is set, which can be checked with ferror and feof, respectively.
- 在上述两种情况下,相应的指示器会被设置。你可以使用
ferror
函数来检查是否有读取错误,而使用feof
函数来检查是否已到达文件末尾。
- 在上述两种情况下,相应的指示器会被设置。你可以使用
-
If either size or count is zero, the function returns zero and both the stream state and the content pointed by ptr remain unchanged.
- 如果
size
或count
中的任何一个为零,该函数会返回零,并且流的状态以及由ptr
指向的内容都不会改变。
- 如果
函数使用展示:
从 pf 中以二进制的形式读取 1 个大小为 sizeof(struct S) 的数据,放进 s 中
谢谢观看,祝你开心~