首页 > 代码库 > c文件重点总结

c文件重点总结

c文件重点知识总结

程序文件
数据文件--->分文本文件(ASCII文件)和映像文件(二进制文件) 。区分是用记事本打开后能否看懂。

用二进制文件读写花费时间少,因为用文本文件需要有一个转换的过程,

文件缓冲区;输入文件缓冲区--->磁盘文件中的数据向内存读入时,需要先存到缓冲区,待这个缓冲区装满后一起被送到内存中。
输出文件缓冲区--->内存数据写入磁盘文件中时,同上。

文件信息区:每个被使用的文件,在内存中自动开辟一个文件信息区,用来保存文件的信息。这些信息是存在结构体变量(系统自动生成)中的,
取名为FILE,用文件时用FILE *fp;定义一个指向文件信息区的指针变量,用来使用该文件。也就是说,通过该指针,能够找到与之相关联的文件。
***应该注意,这个指针不是指向外部介质上的数据文件的开头,而是指向文件信息区的开头。

文件函数:
一、打开与关闭文件:
1.fopen(文件名,使用文件方式);
---->成功返回文件信息区的首地址,失败返回NULL;
文件名可以是字符串常量,要用双撇号括起来。如“file1.dat”。可以指定路径,由于\在C语言中是转义字符的前导,用\\来指示路径。
如 ”F:\\aa\\file1.dat“就是说打开F盘的aa文件夹下的file1文件。如果不指定,文件一般会自动放在源程序文件相同的文件夹下(依编译系统而异)。

文件使用方式 基本的有6种。
“r”:只读。为了读取文本文件中的数据而打开文件。如果文件不存在,会返回NULL值。文件位置标记在文件开头。
“w”:只写。为了向文本文件中写入数据以保存。如果文件不存在,会试图自动创建一个你命名的文件。一般都会试图成功。文件位置标记在文件开头。应该注意,如果你要写而打开一个文件,该文件已存在,系统会删除该文件再重新建立一个同名文件,源文件中的数据会丢失。
“a”:追加。向文本文件的末尾追加数据,可写,原数据不消失。文件位置标记在文件数据末尾。
“rb”,“wb”,“ab" 分别对应二进制文件。

2.fclose(文件名)

因为数据是先存在缓冲区里的。所以程序结束,你没close掉文件,缓冲区里的信息会丢失。(虽然大多数编译系统不会出现这种情况,但应该避免)。因而,程序结束之前我们要关掉文件,强制使得缓冲区里的数据保留到文件中。

二、顺序读写数据文件:
1.读写字符
1)fgetc(fp);从fp指向的文件中读入内存一个字符。成功返回该字符,失败返回文件结束标志EOF(-1);
2)fputc(ch,fp):把字符ch写入文件fp中。成功返回该字符,失败返回EOF。

2.读写字符串
1)fgets(str,n,fp);从fp中读取一个长度为n-1的字符串(因为要留一个\0),存放到字符数组str中。成功返回str地址,失败返回NULL;
2)fputs(str,fp); 把字符数组str写到fp中。成功返回0,失败返回非0值。
应该注意,当向文件中写入字符串时,每当写入一个字符串,营房写入一个\n来区分各个字符串。

3.向二进制文件读写一组数据、或者说一块数据:
1、fread(buffer,size,count,fp) 从fp中读入count个size个字节的数据,存储到一个数组中,这个数组的地址是buffer。读成功返回count值。
2、fwrite(buffer,size,count,fp) 把buffer地址指向的数组中的数据,取count个size个字节,存到fp中。成功返回count。
写的一般形式是这样的:
if(fwrite(&stu[i],sizeof(struct Student),1,fp)!=1)
{
printf("file wrute error!\n");
exit(0);
}
feof(fp);检查上一次读写的状态,默认为0,读写成功返回1,else 返回0。



c文件重点总结