1 fopen() 函数
[函数原型]
#include <stdio.h>
FILE * fopen ( const char * filename, const char * mode );
[函数描述]
打开由字符串filename指定的文件,并将该文件流与函数返回值相关联,该函数的返回值是一个文件指针(FILE pointer)。
可以调用fclose freopen来将文件指针与文件流关联关系断开。
在程序终止时,所有打开的文件会自动被关闭。
[参数介绍]
mode
“r” read:为输入操作打开一个文件,且文件必须存在
“w” write:为输出操作创建一个空文件,如果文件存在,则文件里面的内容被清空,文件被开成是一个空文件。
“a” append:为输出操作打开一个文件,文件指针停留在文件的末尾处。文件指针总是停留在文件的末尾处,并且重新定位文件指针的操作(fseek, fsetpos, rewind)失效。如果文件不存在,则创建一个新的文件。
“r+” read/update:更新一个已存在的文件,适用于输入和输出操作。
“w+” write/update:创建一个空文件并且更新该存在的文件,适用于输入和输出操作。如果已存在一个同名文件,则对该文件进行清空操作,即视为空文件。
“a+” append/update:更新一个文件,文件指针停留在文件的末尾处。该操作适用于输入输出操作。重新定位文件指针的操作(fseek, fsetpos, rewind)失效。如果文件不存在,则创建一个新的文件。
filename 字符数组,如"myfile.txt"。可以用绝对路径找到文件
[返回值]
返回一个指向文件的流文件指针。
[注意事项]
(1)该模式默认以文本格式打开文件进行操作。如果想以二进制模式打开一个文件,必须在上述模式后面加入字符“b”
格式如下:"rb", "wb", "ab", "r+b", "w+b", "a+b" 或者"rb+", "wb+", "ab+"
(2)另外,文本文件是一个保存着多行文本内容的文件,可以进行行操作。根据应用程序的不同,在进行输入输出时一些特殊的字符需要转化成系统指定的文本文件格式。
2 fclose()介绍
[函数原型]
#include <stdio.h>
int fclose ( FILE * stream );
[函数描述]
关闭文件。
将文件指针stream与文件的关联关系断开。
所有与此文件流相关联的内部缓冲区与该文件指针脱离,并冲洗该缓冲区:还未写入文件的输出缓冲区里的字符被写,还未读入程序的输入缓冲区内容被忽略。
即使调用fclose失败,与文件指针相关联的流既不与文件关联,也不与缓冲区关联。
[参数介绍]
stream 文件指针
[返回值]
如果关闭操作成功,则返回零,否则返回EOF
3 fread() 介绍
[函数原型]
#include <stdio.h>
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
[函数描述]
从文件流中读数据块。从stream流中读入count个元素,每个元素占有size个字节,并将它们存储在由ptr指定的内存块中。
如果操作成功的话,读入的总字节数是size*count。
[参数介绍]
ptr 指向一个大小为size*count字节的内存块的无符号指针
size 每一个元素占的字节数
count 元素个数
stream 指向一个文件对象的输入流
size_t 是一个无符号整数类型
[返回值]
返回成功读取的元素个数。这个数一定事小于等于count
[注意事项]
使用的异常判断是:ferror feof
由于该函数能够指定读入的元素个数,所以该函数是针对数据块进行的。
4 fwrite() 介绍
[函数原型]
#include <stdio.h>
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
[函数描述]
将ptr指向的内存中的数据块(字节数是size*count)写入文件指针stream相关联的文件。
操作后,内部文件位置指针将向前移动实际写入文件的字节数,不大于size*count
[参数介绍]
ptr 即将写入的内存块指针
size 每个文件占的字节数
count 需要写入内存的元素个数
stream 与某个文件相关联的文件指针
[返回值]
返回成功写入的元素个数。这个数一定事小于等于count
由于该函数能够指定读入的元素个数,所以该函数是针对数据块进行的。
例子:
#include <stdio.h>
int main(void)
{
FILE *fin,*fout;
char buffer[20];
int count;
fin=fopen("myfile.txt","r");
if(fin!=NULL)
{
count=fread(buffer,sizeof(char),50,fin);
printf("the count of reading into the buffer is %d\n",count);
printf("the content of the buffer is %s\n",buffer);
fclose(fin);
}
fout=fopen("myfile.txt","a+");
if(fout!=NULL)
{
count=fwrite(buffer,sizeof(char),count,fout);
printf("the count of writing into myfile.txt is %d\n",count);
printf("the content of the buffer is %s\n",buffer);
fclose(fout);
}
return 0;
}
结果:
myfile.txt里面的内容是hello,world