fopen(文件打开函数)
功能:打开一个文件,基于标准I/O文件。
原型:FILE *fopen(const char *path , const char *mode)
参数:path:打开文件路径和文件名
mode:文件流
r:以只读的方式文件,该文件必须存在
r+:以读写的方式打开文件,文件必须存在
w:以只写的方式打开文件,打开后清空文件,若文件不存在就创建
w+:以读写的方式打开文件,打开后清空文件,若文件不存在就创建
a:以附加的方式打开(只读)文件,写入的数据加到文件尾,若文件不存在就创建
a+:以附加的方式打开(可读写)文件,写入的数据加到文件尾,若文件不存在就创建
返回值:顺序打开就会返回指向该文件流的指针,失败返回NULL
fread
作用:从文件流中读取数据
原型:size_t fread(viod *ptr , size_t size , size_t number , FILE *fp)
参数:ptr:存放数据的缓冲区
size:一个数据块的大小
number:数据块的个数
fp:文件流
返回值:实际读到数据块的数目
fwrite
作用:将数据写到文件流中
原型:size_t fwrite (const void *ptr , size _t size , size_t number FILE *fp)
参数:ptr:要写的数据存放的地址
其余的同fread
返回值:实际写入的数据块的个数
fseek
作用:移动文件流的读写位置
原型:int fseek(FILE *fp , long offset , int whence)
参数:fp:文件流
offset:偏移量(相对于whence)
whence:文件的指针位置
SEEK_SET:文件头
SEEK_CUR:文件当前
SEEK_END:文件尾
返回值:成功返回0,出错返回-1
ftell
作用:取得文件流的读写位置
原型:long ftell(FILE *fp )
返回值:成功返回当前读写位置
feof
作用:检查文件流是否到文件尾
原型:int feof(FILE *fp)
返回值:返回非零值表示到达文件尾,其他情况返回零
文件的复制(经典范例)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 1024
int main()
{
FILE *from_fp;
FILE *to_fp;
char str[MAX_SIZE] = {0};
char *src;
int file_len;
int r_num;
int w_num;
src = str;
from_fp = fopen("fcopy.c","r");
if(from_fp == NULL)
{
printf("fopen file1 error!\n");
exit(1);
}
to_fp = fopen("ab.c","w+");
if(to_fp == NULL)
{
printf("fopen file2 error!\n");
exit(1);
}
fseek(from_fp,0,SEEK_END);
file_len = ftell(from_fp);
fseek(from_fp,0,SEEK_SET);
printf("the file size is %d\n",file_len);
while(feof(from_fp) == 0)
{
fread(str,MAX_SIZE,1,from_fp);
if(MAX_SIZE >= file_len)
{
fwrite(str,file_len,1,to_fp);
}
else
{
fwrite(str,MAX_SIZE,1,to_fp);
file_len -= MAX_SIZE;
}
memset(str,0,MAX_SIZE);
}
fclose(from_fp);
fclose(to_fp);
return 0;
}