顺序文件的读操作
1、基于字符的读文本文件操作
字符的输出函数是 fgetc(),声明格式是:
int fgetc( FILE *fp);
参数 fp 是已经打开的文件中指针,函数返回值为整型数值。如果成功读取了字符,函数返回值是所读取的字符,如果不能成功读取,函数返回值是 EOF。EOF 表示文件结尾。
例1:读取字符文件,将读取内容显示到屏幕上
// 读取字符文件,将读取内容显示到屏幕上
#include<stdio.h>
void main()
{
FILE * fp; //定义文件指针
int c,i;
fp=fopen("D://test//file_operate//test1.txt","r"); //以读的方式打开文件
if(fp==NULL)
{ // 如果打开不成功,输出错误信息后退出程序
printf("File open Error!");
return; //
}
else
{
printf("The Files are as follow:\n");
while((c=fgetc(fp))!=EOF)
{
printf("%c",c);
}
printf("\n");
fclose(fp);
}
}
2、基于字符串的读文本文件操作
基于字符串的读操作,每次将从文件中读出一个指定长度的字符串。读字符串的函数是 fgets(),声明格式是:
char fgets(char *str, int length,FILE *fp);
参数 str 是一个具有实际存储空间的字符串指针。有实际存储空间是指这个指针指向的地址是已经分配给这个指针的一片存储区域,例如字符数组的首地址等。
参数length 表示要读取字符串的长度,当读了n-1个字符或遇到换行符时,读取操作自动结束。
fp 是文件指针。
函数 fgets() 的返回值是字符指针类型,如果读取成功,它将返回一个指针指向读出的字符串,如果文件读取不成功,例如读文件时碰到EOF的情况或其他异常情况,返回值为NULL。
// 读取字符串文件,将读取内容显示到屏幕上
#include<stdio.h>
void main()
{
FILE * fp; //定义文件指针
char ch[80];
fp=fopen("D://test//file_operate//test1.txt","r"); //以读的方式打开文件
if(fp==NULL)
{ // 如果打开不成功,输出错误信息后退出程序
printf("File open Error!");
return; //
}
else
{
printf("The Files are as follow:\n");
while(fgets(ch,4,fp))
{
puts(ch);
}
printf("\n");
fclose(fp);
}
}
3、格式化读文本文件操作
格式化读文本文件的函数是 fscanf(),声明格式是:
int fscanf(FILE *fp,格式字符串,参数1,参数2,…);
fscanf()函数的各个参数的含义与fprintf()函数相同。它的作用是把文件中的数据按格式字符串所指定的信息读出。
fscanf()的返回值是整型数据,表示格式转化的次数,返回值为0,则说明从文件中读取了数据但没有进行转换;如果写第一次转换前即读到文件尾,返回值为EOF。
例3:格式化读取文件,将读取内容显示到屏幕上。
// 格式化读取文件,将读取内容显示到屏幕上
#include<stdio.h>
void main()
{
FILE * fp; //定义文件指针
char ch;
int iCount;
fp=fopen("D://test//file_operate//test1.txt","r"); //以读的方式打开文件
if(fp==NULL)
{ // 如果打开不成功,输出错误信息后退出程序
printf("File open Error!");
return; //
}
else
{
printf("The Files are as follow:\n");
iCount=fscanf(fp,"The char is %c\n",&ch); // 没有加 \n时死循环,一直输出 a
while(iCount!=EOF)
{
printf("%c\n",ch);
iCount=fscanf(fp,"The char is %c\n",&ch);
}
printf("\n");
fclose(fp);
}
}
4、读数据块
与写数据块对应,也可以通过一次性读数据块的方法来读取文件数据,尤其是在读取存放的是自定义数据结构类型时,这种方法非常合适。
以这种方式读文件,必须要指明读到内存中哪一片区域,存储空间必须足够大,也必须要知道这么多数据当中,每个数据单元所占用的空间字节数等。读数据块的函数是:
unsigned fread(void *buffer,int size,int n,FILE *fp);
这个函数有 4 个参数,buffer 是用于保存数据的内存起始地址;size 是数据类型的大小;n 是要读多少个指定类型的数据;fp 是文件指针。
函数的返回值是实际从文件读出的数据的个数,有可能等于 n,也可能不等。如果在读文件过程中发生错误或者读取文件已经达到文件尾,读操作就会终止,实际读取的数据个数也就会小于 n。如果size参数或者n参数设置为0,返回值也是0,即buffer参数指向的缓冲区内容不会改变。
例4:一次读10个数据,将读取内容显示到屏幕上。
// 一次读10个数据,将读取内容显示到屏幕上
#include<stdio.h>
void main()
{
FILE * fp; //定义文件指针
char ch[80];
int iCount;
fp=fopen("D://test//file_operate//test1.txt","r"); //以读的方式打开文件
if(fp==NULL)
{ // 如果打开不成功,输出错误信息后退出程序
printf("File open Error!");
return; //
}
else
{
printf("The Files are as follow:\n");
while(iCount=fread(ch,sizeof(char),10,fp))
{
printf("iCount is : %d\n",iCount);
ch[10]='\0';
puts(ch);
}
printf("\n");
fclose(fp);
}
}
5、读二进制文件
读二进制文件与读文本文件的方式类似,不同的是只需要将文件打开方式改为二进制文件打开方式即可,例如“wb”,“ab”等。