1. 概述
在C语言中,文件操作是很常见的操作之一。文件的读写操作是程序中经常需要的,因此理解文件以及文件操作也是C语言编程中重要的一部分。在C语言中,文件可以分为文本文件和二进制文件。两者的区别在于存储的方式不同。
2. 文本文件
文本文件是一种基于文本的文件格式。它是由通常由ASCII编码的字符组成,每个字符占据一个字节。文本文件在C语言中的读写可以使用标准库函数fopen()和fclose()来操作。
2.1 文本文件的读操作
在C语言中,读取文本文件可以使用fscanf()、fgets()和getc()等函数。其中使用fscanf()函数读取文本文件时,需要指定读取的字符类型,比如%c表示读取一个字符,%s表示读取一个字符串,而使用fgets()函数则可以直接读取一行字符。以下是使用fgets()函数读取文本文件的示例代码:
#include <stdio.h>
int main()
{
FILE *fp;
char str[100];
fp = fopen("test.txt", "r");
while(fgets(str, 100, fp) != NULL)
{
printf("%s", str);
}
fclose(fp);
return 0;
}
可以看出,fgets()函数直接读取一行字符,并且每次成功读取一行之后,指针自动下移,可以继续读取下一行。
2.2 文本文件的写操作
将数据写入文本文件中可以使用fprintf()或者fputs()函数。使用fprintf()函数时需要指定输出的格式,比如%s表示输出一个字符串,而%f表示输出一个浮点数。以下是使用fputs()函数将字符串写入文本文件的示例代码:
#include <stdio.h>
int main()
{
FILE *fp;
char str[] = "Hello World!";
fp = fopen("test.txt", "w");
fputs(str, fp);
fclose(fp);
return 0;
}
使用fputs()函数将字符串写入文件,需要指定文件指针和待写的字符串。这里将字符串"Hello World!"写入了名为"test.txt"的文本文件中。
3. 二进制文件
与文本文件不同的是,二进制文件中可以包含任意类型的数据,包括整数、浮点数、字符、结构体等等。在C语言中,二进制文件的读写可以使用fread()和fwrite()函数来实现。
3.1 二进制文件的读操作
在C语言中,读取二进制文件可以使用fread()函数。fread()函数需要指定读取数据的长度和读取次数,并且需要指定文件指针和读取数据存储的位置。以下是使用fread()函数读取二进制文件的示例代码:
#include <stdio.h>
struct student
{
char name[20];
int score;
};
int main()
{
FILE *fp;
struct student s;
fp = fopen("test.dat", "rb");
fread(&s, sizeof(struct student), 1, fp);
printf("Name: %s\nScore: %d", s.name, s.score);
fclose(fp);
return 0;
}
上面的代码是一个读取二进制文件的例子。这里将一个结构体作为数据类型读取,读取的数据存储在结构体s中。读操作时需要指定文件指针和读取数据的长度和数量,这里的长度是sizeof(struct student),数量是1,表示只读取一个结构体的数据。
3.2 二进制文件的写操作
使用fwrite()函数将数据写入二进制文件中。与fread()函数相似,使用fwrite()函数时需要指定写入数据的长度和写入次数,并且需要指定文件指针和写入数据存储的位置。以下是使用fwrite()函数将数据写入二进制文件的示例代码:
#include <stdio.h>
struct student
{
char name[20];
int score;
};
int main()
{
FILE *fp;
struct student s = {"Tom", 80};
fp = fopen("test.dat", "wb");
fwrite(&s, sizeof(struct student), 1, fp);
fclose(fp);
return 0;
}
上面的代码是一个向二进制文件写入数据的例子。这里也是使用struct作为数据类型写入,将名为"Tom"的学生的分数80写入二进制文件中。
4. 总结
文本文件与二进制文件是C语言中常见的两种文件格式。文本文件是由ASCII编码的字符组成,每个字符占据一个字节,可以使用标准库函数来进行读写操作。而二进制文件中可以包含任意类型的数据,包括整数、浮点数、字符、结构体等等。二进制文件的读写需要使用特定的函数,如fread()和fwrite()等。