写在前面
1. 建议先直接看代码,遇到不懂的函数再看函数的使用方法
2. 文件操作不是复制几行代码就可以解决的,建议花点时间认真学习一下
1. 用到的函数
一、必须用到的函数
- fopen(“文件路径名”,“读取类型”)
- 功能:打开文件
- 参数:要打开的文件路径 ,读取类型(只读“r”,重写“w”,追加“a”,读写“r+”)
- 例子:fopen(“test.txt”,“r”);只读方式打开当前路径下test.txt文本
- fseek(FILE *stream, long offset, int fromwhere)
- 功能:把与fp有关的文件位置指针放到一个指定位置
- 参数:
- (1).文件指针(fp)
- (2).文件指针偏移量(-3表示前后偏移3个字符,+3向后)
- (3).文件指针的当前位置(只可为三种规定参数)
- ①SEEK_SET 文件开头
- ②SEEK_CUR 文件当前位置
- ③ SEEK_END 文件末尾
- 例子:fseek(fp,50L,SEEK_SET);将位置指针移到离文件头50个字节处
- fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
- 功能:从给定文件流 stream 读取数据到 ptr 所指向的数组中
- 参数:
- ptr – 打算存放文件内容的指针
- size – 文件的大小,一般以字节为单位
- nmemb – 文件字节的个数,每个元素的大小为 size 字节
- stream – 打开的文件指针(fp)
- 例子:fread(tmp,10,20,fp);在文件指针fp指向的文件中以10为单位读取20个元素,放入tmp指针指向的地址空间中
- ftell(FILE *stream)
- 功能: 用于得到文件位置指针当前位置相对于文件首的偏移字节数
- 参数:fp文件指针指向的位置
- 例子:ftell(fp);fp指针当前位置对于文件开始的偏移量(可以通过偏移量计算文件大小)
二、建议使用的函数
- malloc(“size”);
- 功能:为变量(数组)动态分配空间
- 参数:打算分配空间的大小
- 用法:tmp=(char )malloc(10sizeof(char)); 给tmp字符串分配10个字节大小的空间
- memset(void*,int/char,size);
- 功能:替换数组内的内容,可用作数组内容初始化,可以避免结果产生乱码
- 参数:要替换的数组当前指针位置,替换为什么内容,当前指针往后的单位数(可替换部分)
- 用法:memset(tmp,’\0’,strlen(tmp)*sizeof(char)); 将tmp数组全部初始化为“\0”;
- strlen()用于求数组的长度
2.代码分析
//代码虽简单,但还是需要认真分析滴!
# include <stdio.h>
int main( void )
{
FILE *fp;
int file_size; //保存文件字符数
char *tmp; //将文件内容读到此指针位置
fp=fopen("./test.txt","r"); //打开文件
fseek(fp,0,SEEK_END); //将文件指针指向该文件的最后
file_size=ftell(fp); //根据指针位置,此时可以算出文件的字符数
printf("文件字符数为 %d\n",file_size);
tmp=(char *)malloc(file_size*sizeof(char)); //根据文件大小为tmp动态分配空间
memset(tmp,'\0',file_size*sizeof(char)); //初始化此控件内容,否则可能会有乱码
fseek(fp,0,SEEK_SET); //重新将指针指向文件首部
fread(tmp,sizeof(char),file_size,fp); //开始读取整个文件
printf("文件内容为\n%s",tmp);
return 0;
}