文件编程

文件编程函数:
文件打开:FILE *fopen (const char *文件路径, const char *操作方式);
注: 操作方式:
第一部分:r(只读)、w(创建/写)、a(追加)、r+(读+写)
第二部分:t(文本文件)、b(二进制文件)
其中 若以r打开不存在的文件,将返回NULL,即失败
若以w打开文件,两种情况 ①文件存在,清空该文件 ②文件不存在,创建一个空文件

文件关闭:void fclose(FILE *fp);

文件写:fprintf(FILE *fp, const char *format, ……); 将字符串写入文件 例如fprintf(fp, “%d”, num);

文件读:fscanf(FILE *fp, const char *format, ……); 从文件中按format形式读取数据 例如fscanf(fp, “%d”, &num);
注:stdin表示键盘,stdout表示屏幕,若fprintf中的fp为stdout,则等价于printf;
若fscanf中的fp为stdin, 则等价于scanf;

文件字节读: int fgetc(FILE *fp); 从文件中读取一个字节的数据,并将读写指针后移一个字节;

文件字节写: int fputc(int ch, FILE *fp); 向文件中写入一个字节的数据,并将读写指针后移一个字节;

文件字符串读:char *fgets(char *str, int n, FILE *stream)
从stream控制的文件中读取最多n个字节的字符,赋值给str所指空间,并且加以0结束标志(将以回车为读取结束)

文件字符串写:int fputs(char *str, FILE *fp); 将str所指字符串,按遇零则止写入到fp

文件二进制读:unsigned int fread(void *buffer, unsigned int size, unsigned int count, FILE *stream);
从stream控制的文件文件中读取size * count个字节的内容存到buffer所指空间中

文件二进制写:unsigned int fwrite(const void *buffer, unsigned int size, unsigned int count, FILE *stream);
将buffer所指空间开始的size * count个字节的内容,写到stream控制的文件中

注:读写函数区别:
fprintf()fputs()写到文件里的是ASCII码(文本)(对人眼易看,但不整齐) 文件打开方式需文本文件t
fputc()fwrite()写到文件里的有可能非ASCII码 (人眼不易看,但每个数据占4字节,整齐) 文件打开方式需二进制文件b

遍历文件内容:

ch = fgetc(fp);
while (!feof(fp)) {
     
		ch = fgetc(fp);
}

如上,遍历文件需要利用feof()但是不能直接开始循环,必须选读取一次文件内容,否则文件遍历将超出文件范围;

计算文件数据量:
文本文件:
因为文件中是长度不等的ASCII码,用空格分隔,所以空格数量+1就是数据数量

int count = 0;
fscanf(fp, "%d", &num);
while (!feof(fp)) {
     
	count++;
	fscanf(fp, "%d", &num);
}

循环结束后,count就是数据总量

二进制文件:
所需函数:fseek(FILE *stream, long offset, int fromwhere);
fromwhere有三种取值:①SEEK_SET文件开头 ②SEEK_CUR文件当前读写指针 ③SEEK_END文件最后一个字节
feek()函数就是将文件读写指针移动到offset所指字节处

long ftell(FILE *stream);返回从文件开始到这个位置的字节数(文件读写指针当前所在位置的字节数(偏移量))

功能实现:

fseek(fp, 0, SEEK_END);
filesize = ftell(fp);    				//这是文件字节数
datanum = filesize / sizeof(int);  		// 这是文件数据个数

你可能感兴趣的:(文件编程)