C语言中的文件操作相关函数
文件的打开与关闭,读与写操作的相关函数,在对文件操作之前,必须定义一个文件指针,这样的话,才能对该文件进行操作。c语言中的文件操作相关函数的头文件都是
#include
FILE * fp;//可以是任何其他指针名
1)open()函数
函数功能:文件打开函数
函数原型:fp=fopen(文件名,使用文件方式);
FILE *fopen(const char *path,const char *mode); //文件名模式
函数说明:如果是当前工作目录下的文件,可以不用加路径名,如果是其他目录下的则需要加路径
函数参数:以mode的方式打开或创建文件
函数返回值:如果成功,将返回一个文件指针,失败则返回NULL(其实就是0)
函数注意:文件名和打开的方式在写的时候,必须用双引号括起来
在Linux 系统中,mode 里面的’b’(二进制)可以去掉,但是为了保持与其他系统的兼容性,建议不要去掉。ab和a+b 为追加模式,在此两种模式下,无论文件读写点定位到何处,在写数据时都将是
在文件末尾添加,所以比较适合于多进程写同一个文件的情况下保
证数据的完整性。
使用文件的方式如下:
“r”(只读):为输入打开一个文本文件对文件进行读操作
“w”(只写):为输出打开一个文本文件对文件进行写操作
“a”(追加): 向文本文件尾添加数据
“rb”(只读):为输入打开有一个二进制文件
“wb”(只写):为输出打开一个二进制文件对文件进行写操作“ab”(追加): 向二进制文件尾添加数据
“r+”(读写):为读写打开一个文本文件
“w+”(读写):为读写建立一个新的文本文件
“a+”(读写): 向文本文件尾添加数据
“rb+”(读写):为读写打开一个二进制文件
“wb+”(读写):为读写建立一个新的二进制文件
“ab+”(读写): 为读写打开一个进制文件
模式读写位置截断原内容创建
rb Y N 文件头 N N
r+b Y Y 文件头 NN
wb N Y 文件头 Y Y
w+b Y Y 文件头 YY
ab N Y 文件尾 N Y
a+b Y Y 文件尾 N Y
2)fclose()函数
函数功能:文件的关闭
函数原型:fclose(文件指针)
int fclose(FILE *stream)
函数返回值:成功关闭文件返回值为0,否则返回EOF(-1);
函数说明:使用完一个文件,以防止再次被误用,关闭,就是指文件指针变量不再指向该文件,防止数据丢失
基于文件指针的读写函数很多,可分为数据块读写、格式化读写、单个字符读写、字符串读写
3)fread()函数
函数功能:数据块读,读取多个数据
函数原型:size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream);
fread(buffer,size,count,fp);
函数说明:fread 从文件流stream 中读取nmemb 个元素,写到ptr 指向的内存中,每个元素的大小为size 个字节。
函数注意:所有的文件读写函数都从文件的当前读写点开始读写,读写完以后,当前读写点自动往后移动size*nmemb个字节
函数返回值:返回为1表示读取了size个字节,返回0表示读取不够size字节
4)fwrite()函数
函数功能:数据块写,写入多个数据
函数原型:size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream);
fwrite(buffer,size,count,fp)
函数说明:fwrite 从ptr 指向的内存中读取nmemb 个元素,写到文件流stream 中,每个元素size 个字节
函数返回值:返回所写的数据块的数目,nmemb(count)(实际值)
调用不成功返回值是0
注意:以上,buffer参数,对fread来说,它是读入数据的存放地址,对fwrite来说,是输出数据的地址
示例:
#include
int main()
{
char buf[50] = {'h','e','l','l','o'};
FILE *p;//定义一个FILE 结构体类型的指针p
p = fopen("a.txt", "r+b");//p 这个指针此时就和文件a.txt 关联起来了。
fwrite(buf, 1, 5, p);//把buf 里面的内容写到p 指向的文件中。
char buf1[50] = {0};
fread(buf1, 1, 5, p);
printf("buf1:%s\n", buf1);
fclose(p);//关闭p 代表的文件a.txt
return 0;
}
注意:在Windows下操作的时候,文件路径是双反斜杠”\\”,
因为单个反斜线为转义符,这样打不开文件
#include
int main()
{
char buf[50] = {'h','e','l','l','o'};
char buf1[50] = {0};
FILE *p;//定义一个FILE 结构体类型的指针p
p = fopen("E:\\信盈达School\\C语言\\2017.02.13全日制C语言\\12第12天链表\\5.示例代码\\a.txt", "r+b");//p 这个指针此时就和文件a.txt 关联起来了。
fwrite(buf, 1, 5, p);//把buf 里面的内容写到p 指向的文件中。
fseek(p, 0, SEEK_SET);
fread(buf1, 1, 5, p);
printf("buf1:%s\n", buf1);
fclose(p);//关闭p 代表的文件a.txt
return 0;
}
注意:上面的例子就会发现其实并没有读到任何内容buf1未显示出内容
是因为此时文件指针已经跑到文件末尾了,可以通过在定义一个文件指针的方式,使其执行文件开头,就可以访问到内容
FILE *fp;//定义一个FILE 结构体类型的指针fp
p = fopen("a.txt", "r+b");//fp 这个指针此时就和文件a.txt 关联起来了。
另外一种方式就是文件定位fseek函数