老是忘记 记录一下方便自己查阅!
fseek函数是 用来设定文件的当前读写位置.
函数原型: int fseek(FILE *fp,long offset,int origin);
函数功能:把fp的文件读写位置指针移到指定的位置.
fseek(fp,20,SEEK_SET); 意思是把fp文件读写位置指针从文件开始后移20个字节.
SEEK_CUR(当前位置)、 SEEK_END(文件结尾)或 SEEK_SET(文件开头), 其中SEEK_SET,SEEK_CUR和SEEK_END的值依次为0,1和2
ftell函数是用来获取文件的当前读写位置;
函数原型: long ftell(FILE *fp)
函数功能:得到流式文件的当前读写位置,其返回值是当前读写位置偏离文件头部的字节数.
ban=ftell(fp); 是获取fp指定的文件的当前读写位置,并将其值传给变量ban.
fseek函数与ftell函数综合应用:
分析:可以用fseek函数把位置指针移到文件尾,再用ftell函数获得这时位置指针距文件头的字节数,这个字节数就是文件的长度.
#include <stdio.h>
int main(int argc,char *argv[])
{
FILE *fp;
char filename[80];
long length;
printf("输入文件名:");
gets_s(filename);
//以二进制读文件方式打开文件
fp = fopen(filename, "rb");
if (fp == NULL)
printf("file not found!/n");
else
{
//把文件的位置指针移到文件尾
fseek(fp, 0L, SEEK_END);
//获取文件长度;
length = ftell(fp);
//把文件的位置指针移到文件头
fseek(fp, 0L, SEEK_SET);
printf("该文件的长度为%1d字节/n", length);
fclose(fp);
}
return system("pause");
}
fread
fread是一个函数,它从文件流中读数据,最多读取count个项,每个项size个字节,如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件末尾返回 0。
函数原型
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
参 数
buffer 用于接收数据的内存地址
size 要读的每个数据项的字节数,单位是字节
count 要读count个数据项,每个数据项size个字节.
stream 输入流
返回值
返回真实读取的项数,若大于count则意味着产生了错误。另外,产生错误后,文件位置指示器是无法确定的。若其他stream或buffer为空指针,或在unicode模式中写入的字节数为奇数,此函数设置errno为EINVAL以及返回0.
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
返回值:返回实际写入的数据块数目
(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针;
(5)返回实际写入的数据项个数count。
int main()
{
FILE *oufp = fopen("abin.txt", "wb+");
FILE *infp = fopen("abin.txt", "rb+");
//char buf[] = "abina";
char bb[20] = "";
//int len = strlen(buf);
//fwrite(buf, 1, len, oufp);//写
if (!feof(infp))
{
int aa = fread(bb, 1, 4, infp);//读
int c = fgetc(infp);//读取一位字节并把当前光标往后移一位
printf("bb=%c.%c\n", c, bb[0]);
}
//fseek(oufp, 0L, SEEK_SET);//在流中重定向
//int c = fgetc(oufp);
printf("bb=%c.\n", bb[0]);
return 0;
}