C语言 文件I/O
在这篇文章中,你将学习什么是C语言中的文件,为什么需要它们,以及如何在C语言中借助不同的C语言函数,如fopen()、fclose()、fprintf()、fscanf()、getc()、putc()、getw()、fseek()等处理标准I/O。一个文件代表一个字节序列,无论它是一个文本文件还是一个二进制文件。
一个文件是用来存储巨大的数据。C语言提供了多种文件管理功能,如创建文件、打开和读取文件、向文件写入和关闭文件。文件用于存储相关数据,C语言中的文件处理则用于操作数据。
文件的类型
主要有两种类型的文件可以用C语言中的文件处理来处理。
1.Text Files: 这些是简单的文本文件,以(.txt)为扩展名保存,可由任何文本编辑器创建或修改。文本文件以ASCII字符的形式存储数据,用于存储字符流。
2.二进制文件: 它是以二进制格式而不是ASCII字符存储的。二进制文件通常用于存储数字信息(int, float, double)。这里的数据是以二进制形式存储的,即(0和1)。
可以对一个文件进行的不同操作是。
1.创建一个新文件(fopen,属性为 “a “或 “a+”或 “w “或 “w+”)。
2.打开一个现有的文件(fopenopen)。
3.从文件读取(fscanf或fgets)。
4.用fprintf或fputs向文件写入。
5.将与某一文件相关的文件指针移动到一个特定的位置。(fseek, rewind).
6.关闭一个文件(关闭)。
为了对文件进行操作,使用了一个特殊的指针,称为文件指针,它可以被声明为。
FILE file_ptr
。
我们可以用以下方式打开该文件
第二个参数,即 “w”,可以根据下表改变。
开幕式模式 | 描述 |
---|---|
r | 搜索文件。如果文件被成功打开,fopen( )将其加载到内存中,并设置一个指针,指向其中的第一个字符。如果文件不能被打开,fopen( )则返回NULL。 |
rb | 以二进制模式打开阅读。如果该文件不存在,那么fopen( )将返回NULL。 |
w | 搜索文件。如果文件存在,内容会被覆盖。如果文件不存在,则创建一个新的文件。如果无法打开该文件,则返回NULL。 |
wb | 以二进制模式打开,以供写入。如果文件存在,其内容将被覆盖,否则将创建文件。 |
a | 搜索文件。如果文件被成功打开,fopen( ) 将其加载到内存中,并设置一个指针,指向其中的最后一个字符。如果该文件不存在,将创建一个新文件。如果无法打开文件,则返回NULL。 |
ab | 以二进制模式打开进行追加。数据被添加到文件的末尾。如果一个文件不存在,将被创建。 |
r+ | 搜索文件。成功打开后fopen( )将其加载到内存中,并设置一个指针,指向其中的第一个字符。如果它不能打开文件,则返回NULL。 |
rb+ | 如果文件不存在,fopen( )返回NULL。 |
w+ | 搜索文件。如果该文件存在,其内容将被覆盖。如果文件不存在,则创建一个新的文件。如果无法打开该文件,则返回NULL。 |
wb+ | 在二进制模式下,对读和写都开放。如果文件存在,内容会被覆盖。如果文件不存在,它将被创建。 |
a+ | 搜索文件。如果文件被成功打开,fopen( ) 将其加载到内存中,并设置一个指针,指向其中的最后一个字符。如果该文件不存在,将创建一个新文件。如果无法打开文件,则返回NULL。 |
ab+ | 以二进制模式打开,用于阅读和追加。如果文件不存在,将创建一个文件。 |
如果你想处理二进制文件,那么像 “rb”、”wb”、”ab”、”rb+”、”r+b”、”wb+”、”w+b”、”ab+”、”a+b “等访问模式将被广泛使用。
在C语言中打开或创建一个文件
要在c语言中执行文件的打开和创建,我们可以使用stdio.h头文件中的fopen()函数。
语法:
示例:
用C语言读写文本文件
fprintf()和fscanf()用于在C语言编程中读取和写入文本文件。它们需要一个指向结构FILE的指针,因为它们是print()和scanf()的文件版本。
输出:
上面的程序从用户那里获取一个字符串,并将其存储在text_file.text中。编译这个程序后,在C_Program文件夹中会创建一个名为temp_text.txt的文本文件。在该文件中,我们可以看到我们输入的字符串。
下面是读取文件内容的C语言程序。
输出:
读取和写入二进制文件
fread() 用于从二进制文件中读取,fwrite()用于向磁盘上的文件写入。
1.写入二进制文件
fwrite()函数需要四个参数:数据地址、要写入磁盘的数据大小、数据类型的数量、以及我们要写入的文件的一个指针。
语法:
下面是向二进制文件写入的C程序。
输出:
解释: 在上述程序中,我们正在创建一个名为GFG.bin的新文件。以Num为名的结构已经声明了两个数字–n1,n2,并创建了一个名为obj的对象。在for循环中,我们使用fwrite()函数在文件中存储数值。第一个参数是obj的地址,第二个参数是定义的结构Num的大小。
因为我们只插入了obj的一个实例,所以第三个参数将是1。 fptr将指向存储数据的文件。最后,我们已经关闭了这个文件。
2.从二进制文件中读取
fread()函数也需要四个参数,与C语言编程中的fwrite()函数相似。
语法:
下面是读取二进制文件的C语言程序。
输出:
解释: 在上面的程序中,我们已经读取了同一个文件GFG.bin,并逐个循环读取记录。我们从*fptr指向的文件中读取一条Num大小的记录到结构Num中。 我们会得到与前一个程序中插入的相同的记录。
将文件指针移到特定位置
fseek()和rewind()是C语言编程中的两个方法,可以用来移动文件指针。
1. fseek() 函数
fseek()函数用于将文件指针设置为指定的偏移量并将数据写入文件。
语法:
其中,
- 当可以是SEEK_SET、SEEK_CUR和SEEK_END。
- SEEK_END:它表示文件的结束。
- SEEK_SET。它表示文件的开始。
- SEEK_CUR:它表示文件指针的当前位置。
下面是实现fseek()的C语言程序。
输出:
2 C语言中的rewind()
rewind()函数将文件指针设为文件的开头。
语法:
下面是实现rewind()的C语言程序。
输出: