格式化读写文件函数
/* 函数调用: */
fprintf ( 文件指针,格式字符串,输出表列);
fscanf ( 文件指针,格式字符串,输入表列);
/** 函数功能:
* 从磁盘文件中读入或输出字符
* fprintf 和printf函数类似:
* printf是将数据输出到屏幕上(标准输出),
* fprintf函数是将数据输出到文件指针所指定的文件中。
*
* fscanf和scanf 函数类似:
* scanf是从键盘(标准输入)获取输入,
* fscanf是从文件指针所标示的文件中获取输入。
*/
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp;
char ch1 = 'a', ch2;
int num1 = 50, num2;
char string1[20] = "hello", string2[20];
float score1 = 85.5, score2;
if((fp = fopen("C:/Users/lzx/Desktop/file.txt","w+"))==NULL)
{
printf("fail to fopen\n");
return ‐1;
}
//使用fprintf向文件写入字符串
fprintf(fp,"%c %d %s %f\n",ch1,num1,string1,score1);
rewind(fp);
//使用fscanf获取文件内容
fscanf(fp,"%c %d %s %f\n",&ch2,&num2,&string2,&score2);
printf("%c %d %s %f\n",ch2,num2,string2,score2);
fclose(fp);
return 0;
}
执行结果
随机读写
前面介绍的对文件的读写方式都是顺序读写,即读写文件只能从头开始,顺序读写各个数据;但在实际问题中常要求只读写文件中某一指定的部分,例如:读取文件第200–300个字节。为了解决这个问题可以移动文件内部的位置指针到需要读写的位置,再进行读写,这种读写称为随机读写实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。
rewind
#include <stdio.h>
void rewind(FILE *stream);
/* 功能:将文件位置定位到起始位置
* 参数:
* stream:文件指针
* 返回值:无
* /
ftell
#include <stdio.h>
long ftell(FILE *stream);
/* 功能:获取当前文件的偏移量
* 参数:
* stream:文件指针
* 返回值:
* 获取当前文件的偏移量
* /
fseek
#include <stdio.h>
int fseek(FILE *stream, long offset, int whence);
/* 功能:设置文件位置指针的偏移量
* 参数:
* stream:文件指针
* offset:偏移量
* 可正可负也可为0
* whence:相对位置
* SEEK_SET 文件起始位置
* SEEK_CUR 文件当前位置
* SEEK_END 文件末尾位置(最后一个字符后面一个位置)
* 返回值:
* 成功:0
* 失败:‐1
*/
rewind(fp) <==> fseek(fp, 0, SEEK_SET);
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp;
if((fp = fopen("C:/Users/lzx/Desktop/file.txt","w+"))==NULL)
{
printf("fail to fopen\n");
return ‐1;
}
fputs("123456789\n", fp);
fputs("abcdefghijklmn", fp);
//获取当前文件指针的读写位置
printf("offset = %ld\n", ftell(fp));
//将当前文件的读写文件设置到文件的起始位置
//rewind(fp);
//fseek(fp, 0, SEEK_SET);
//将当前文件的读写位置设置为倒数第五个位置
fseek(fp, ‐5, SEEK_END);
char buf[32] = "";
while(fgets(buf, 32, fp) != NULL)
{
printf("[%s]\n", buf);
}
return 0;
}
执行结果