概述
c中文件的读取操作
“文件(file)”:所谓“文件”是指一组相关数据的有序集合。数据以文件的形式存放在外部介质(一般是磁盘、磁带、光盘等)上,操作系统中是以文件为单位对数据进行管理的,以文件名作为访问文件的标识。
C语言把文件看作一个字节序列,即由一连串的字节组成。根据文件中的数据组织形式,数据文件可分为ASCII码文件和二进制文件。ASCII码文件,又称为“文本文件”(text),其每一个字节存放一个ASCII码。二进制文件,把内存中的数据按其在内存中的存储形式存放在磁盘上。
如:十进制整数10000,在内存中占两个字节,其存放形式是:00100111,00010000。在二进制文件中也按这种方式存放。但是,在ASCII文件中,十进制整数10000存放为31H、30H、30H、30H、30H,占五个字节,它们分别是1、0、0、0、0、0字母的ASCII码。
c中文件的读取,只有通过文件指针,才能调用相应的文件。文件操作的过程:对磁盘文件的操作必须“先打开,后读取,最后关闭”。
下面就是利用文件指针,打开一个文件,以只读的打开方式。<span style="white-space:pre"> </span>FILE * fp;
fp = fopen("D://1//123.txt","r");
下面分析下fopen函数中的第二个参数使用文件方式的类别,
使用文件方式 | 含义 |
"r"(只读) | 为输入打开一个文本文件 |
"w"(只写) | 为输出打开一个文本文件 |
"a"(追加) | 为追加打开一个文本文件 |
"rb"(只读) | 为输入打开一个二进制文件 |
"wb"(只写) | 为输出打开一个二进制文件 |
"ab"(追加) | 为追加打开一个二进制文件 |
"r+"(读写) | 为读/写打开一个文本文件 |
"w+"(读写) | 为读/写创建一个文本文件 |
"a+"(读写) | 为读/写打开一个文本文件 |
"rb+"(读写) | 为读/写打开一个二进制文件 |
"wb+"(读写) | 为读/写创建一个二进制文件 |
"ab+"(读写) | 为读/写打开一个二进制文件 |
注释:
1、若使用文件方式为“a”,表示向文件尾添加新数据(不删除原有数据),但要求此时文件必须存在,否则出错,但是我在是vs2010中调试,文件不存在,会自动建立一个文件,不会报错,此外只能向文件写数据不能读取文件中的数据。若使用文件方式为“a+”,表示向文件尾添加新数据(不删除原有数据),文件不存在,会自动建立一个文件,不会报错,另外使用这种文件方式,打开的文件即可以用来输入数据,也可以用来输出数据。
2、用"w"方式打开的文件只能用于向该文件写数据。如果原来不存在该文件,则在打开时新建一个文件,如果该文件存在,则先删除该文件(其中的数据肯定删除了),然后重新建立一个新文件。
3、若使用文件方式为“w+”和“w”,如果原来不存在该文件,则在打开时新建一个文件,如果该文件存在,则先删除该文件(其中的数据肯定删除了),然后重新建立一个新文件。
4、若使用文件方式为“r+",该文件必须存在,向文件中写入数据的时候,不会先删除该文件,而是直接覆盖,能覆盖多少就覆盖多少,覆盖不了的先前数据仍然存在文件中。
使用文件方式为“r+”,向文件中存入数据:
int main(void)
{
FILE * fp;
if((fp = fopen("D://1//123.txt","r+"))== NULL)
{
printf("can not open the filen");
exit(0);
}
char str[] ="he fei wo yao liu xia1";
int len = strlen(str);
for(int i = 0; i < len;i++)
{
fputc(str[i],fp);
}
fclose(fp);
return 0;
}
使用文件方式为“r+”,从文件中读出数据
int main(void)
{
FILE * fp;
if((fp = fopen("D://1//123.txt","r+"))== NULL)
{
printf("can not open the filen");
exit(0);
}
char ch = fgetc(fp);
while(ch != EOF)//从文本文件中读取数据
{
putchar(ch);
ch = fgetc(fp);
}
fclose(fp);
return 0;
}
对于文本文件,遇文件尾时返回文件结束标志EOF。对于二进制文件,用feof(fp) 判别是否遇文件尾,feof(fp)=1说明遇文件尾。
从文本文件中顺序读入文件内容,并在屏幕上显示出来,可以用:
ch = fgetc(fp);
while(ch != EOF)
{
putchar(ch);
ch = fgetc(fp);
}
从二进制文件中顺序读入文件内容,可以用:
while(!feof(fp))
{
ch = fgetc(fp);
}
如果在文件中写入数据,如果没有关闭就直接读取文件中的内容,就会出现错误-写好文件后,没有关闭,那么文件指针在最后一个位置,那你在读的时候肯定就是从末尾啊,所以是随机字符,这样会出现乱码。如何纠正,等文件写完数据后,首先关闭文件,再读取文件,即可,如下
fclose(fp);
fp = fopen("D://1//123.txt","r+");
下面介绍读写字符串函数:fgets和fputs:
fp = fopen("D://1//123.txt","r+");
下面介绍读写字符串函数:fgets和fputs:
1、读字符串函数fgets函数
功能:从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针);其中的n是一个正整数。表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志'