1.核心理论
库函数:基于c函数库的文件编程是独立于具体的操作系统平台的,不管是在windows下还是linux下,都是使用这些函数,使用库函数进行程序设计可提高程序的可移植性。
流:对于标准的c函数库,它们的操作都是围绕流来进行的。流是一个抽象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存或者网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的的流,这时候你就可以想象数据好像在其中“流”动一样。
文件指针:在系统调用方式实现文件访问中,使用文件描述符来指向一个文件。在库函数方式的文件访问中,使用FILE类型来表示一个打开的文件,这个类型中包含了管理文件流的信息。而指向该类型的指针FILE*则被称之为文件指针。
2.函数学习
打开文件 函数名:fopen 函数原型:FILE *fopen(const char *path, const char *mode); 函数功能:打开文件 头文件:<stdio.h> 返回值:成功:文件指针, 失败:NULL 参数说明:path:含路径的文件名 mode:文件打开模式关闭文件 函数名:fclose 函数原型:int fclose(FILE *fp); 函数功能:关闭文件 头文件: <stdio.h> 返回值:成功:0 失败:EOF 参数说明:fp:文件指针
读文件 函数名:fread 函数原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *steam); 函数功能:从文件中读取数据 头文件: <stdio.h> 返回值:成功:读取到的数据量 失败:0 参数说明:stream:指向要读取的文件 ptr:指向要保存的位置 memb:读取的数据块数 size:每块数据的大小
写文件 函数名:fwrite 函数原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); 函数功能:向文件中写入数据 头文件:<stdio.h> 返回值:成功:返回成功写入数据量 失败:0 参数说明:stream:要写入数据的文件指针 ptr:存放要写入文件的数据 nmemb:要写入的数据块数 size:每块数据的大小
文件分定位 函数名:fseek 函数原型:int fseek(FILE *stream, long offset, int whence); 函数功能:重新定位文件 头文件: <stdio.h> 返回值:成功:0 失败:-1 参数说明:stream:文件指针 offset:文件偏移 whence:从哪个地方开始偏移
3.综合实例
/******************************************************************
* 程序名:filecp.c
* 功能:文件复制
******************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *fp_src, *fp_des;
int num;
char buff[128];
if(argc != 3)
{
printf("the format must be:cp file_src file_des\n");
exit(EXIT_FAILURE);
}
if((fp_src=fopen(argv[1],"r"))==NULL)
{
perror("fopen");
exit(EXIT_FAILURE);
}
if((fp_des=fopen(argv[2],"w"))==NULL)
{
perror("fopen");
exit(EXIT_FAILURE);
}
while((num=fread(buff,1,128,fp_src))>0)
{
fwrite(buff,1,num,fp_des);
}
fclose(fp_src);
fclose(fp_des);
return 0;
}