对文件操作的各个函数

时间:2022-12-27 09:56:30

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);