Q:创建一个txt文件,向该文件中写入字符串,保存,关闭文件,再打开读文件:
对文件操作的函数,即I/O函数
#include <stdio.h>
需要用到的函数:
FILE *fopen(char *filename, char *type);
/*第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:
* r 以只读方式打开文件,该文件必须存在。
* r+ 以可读写方式打开文件,该文件必须存在。
* rb+ 读写打开一个二进制文件,允许读数据。
* rw+ 读写打开一个文本文件,允许读和写。
* w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
* w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
* a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留(EOF符保留)
* a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留(原来的EOF符不保留)
* wb 只写打开或新建一个二进制文件;只允许写数据。
* wb+ 读写打开或建立一个二进制文件,允许读和写。
* wt+ 读写打开或着建立一个文本文件;允许读写。
* at+ 读写打开一个文本文件,允许读或在文本末追加数据。
* ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
* 上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
*/
int fclose(FILE *fp);//关闭文件
int fread(void *buf, int size, int count, FILE *fp);//读文件函数
int fwrite(void *buf, int size, int count, FILE *fp);//写文件函数
/*
*完成一次读操作(fread())后,如果没有关闭流(fclose()),则指针(FILE * fp)自动向后移动前一次读写的长度,不关闭流继续下一次读操作则接着上次的输出继续输出;
*/
程序实现:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
char path[100],str1[20],str2[20];
int len;
printf("please input the path of the file\n");
scanf("%s",path);
fp = fopen(path,"w");
printf("please input the string you want to write in the file\n");
scanf("%s",str1);
len = strlen(str1);
fwrite(str1,len,1,fp);
fclose(fp);
fp = fopen(path,"r");
fread(str2,len,1,fp);
printf("str2: %s\n",str2);
return 0;
}
Q:计算文件的大小
可以使用下边两个函数来实现
fseek(FILE *fp, long offset, int base); //重定位流上的文件指针,即将fp指向的文件的位置指针移到以base为基准,以offset为偏移量的位置上。
/*
*base可能取值为:
*SEEK_SET: 文件开头
*SEEK_CUR: 当前位置
*SEEK_END: 文件结尾
*其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2.
*/
ftell(FILE *fp)//返回当前文件指针的位置,这个位置是相对于文件开头的偏移量
代码如下:
fopen(fp,"r");
fseek(fp,0,SEEK_END);
len = ftell(fp);
fclose(fp);
printf("the size of the file is %d\n",len);