很多朋友对于fseek返回值和fseek和lseek不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
一、fseek(f,0,SEEK_SET);
意思是把文件指针指向文件的开头
用法: int fseek(FILE*stream, long offset, int fromwhere);
描述:函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
返回值:成功,返回0,否则返回其他值。
fseek position the file position pointer for the file referenced by stream to the byte location calculated by offset.
stream= fopen("MYFILE.TXT","w+");
fprintf(stream,"This is a test");
printf("Filesize of MYFILE.TXT is%ld bytes\n", filesize(stream));
fseek(stream, curpos, SEEK_SET);
int fseek( FILE*stream, long offset, int origin);
第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END或 SEEK_SET
其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2.
fseek(fp,100L,0);把fp指针移动到离文件开头100字节处;
fseek(fp,100L,1);把fp指针移动到离文件当前位置100字节处;
fseek(fp,100L,2);把fp指针退回到离文件结尾100字节处。
void fun(char*filename, STU n)
fseek(fp,-1L*sizeof(STU),SEEK_END);
fwrite(&n, sizeof(STU), 1, fp);
void main()/*修改覆盖最后一个学生数据*/
STU t[N]={{10001,"MaChao", 91, 92, 77},{10002,"CaoKai", 75, 60, 88},
{10003,"LiSi", 85, 70, 78},{10004,"FangFang", 90, 82, 87},
{10005,"ZhangSan", 95, 80, 88}};
STU n={10006,"ZhaoSi", 55, 70, 68}, ss[N];
fp= fopen("student.dat","wb");
fwrite(t, sizeof(STU), N, fp);
fp= fopen("student.dat","rb");
fread(ss, sizeof(STU), N, fp);
printf("\nThe original data:\n\n");
printf("\nNo:%ld Name:%-8s Scores:",ss[j].sno, ss[j].name);
for(i=0; i<3; i++) printf("%6.2f", ss[j].score[i]);
printf("\nThe data after modifing:\n\n");
fp= fopen("student.dat","rb");
fread(ss, sizeof(STU), N, fp);
printf("\nNo:%ld Name:%-8s Scores:",ss[j].sno, ss[j].name);
for(i=0; i<3; i++) printf("%6.2f", ss[j].score[i]);
二、fseek函数是怎么用的
1、fseek函数用于重定位流(数据流/文件)上的文件内部位置指针。
2、函数原型int fseek(FILE*stream, long offset, int fromwhere);
3、具体功能:如果执行成功,stream将指向以fromwhere(起始位置:文件头0(SEEK_SET),当前位置1(SEEK_CUR),文件尾2(SEEK_END))为基准,偏移offset(指针偏移量)个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
4、成功,返回0,失败返回-1,并设置errno的值,可以用perror()函数输出错误。
5、stream=fopen("MYFILE.TXT","w+");
6、fprintf(stream,"This is a test");
7、printf("File size of MYFILE.TXT is%ld bytes\n",filesize(stream));
8、fseek(stream,curpos,SEEK_SET);
三、C语言ab+方式打开文件以及fseek函数
1、函数原型:FILE* fopen(const char* path,const char* mode);
2、返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。
3、一般而言,打开文件后会做一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。
4、#define F_PATH"d:\\myfile\\file.dat"
5、 fp=NULL;//需要指向空,否则会指向原打开文件地址
6、fseek函数功能:重定位流(数据流/文件)上的文件内部位置指针
7、注意:文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变指向别的文件
8、int fseek(FILE*stream, long offset, int fromwhere);
9、参数:stream文件指针,fromwhere起始基准点,offset在基准点的基础上的偏移量。
10、返回值:成功,返回0,失败返回-1,并设置errno的值,可以用perror()函数输出错误。
11、stream=fopen("MYFILE.TXT","w+");
12、fprintf(stream,"Thisisatest");
13、printf("FilesizeofMYFILE.TXTis%ldbytes\n",filesize(stream));
14、fseek(stream,curpos,SEEK_SET);
四、fread()返回值不正确,什么原因
1、返回0通常是读到了文件尾。如果确认没有到文件尾,可以用ferror检查错误。
2、C语言中:fread是一个函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。
函数原型:size_t fread( void*buffer, size_t size, size_t count, FILE*stream);
size要读的每个数据项的字节数,单位是字节
count要读数据项的个数,每个数据项size个字节.
返回实际读取的元素个数。如果返回值与count不相同,则可能文件结尾或发生错误。从ferror和feof获取错误信息或检测是否到达文件结尾。
if((stream=fopen("DUMMY.FIL","w+"))==NULL)
fprintf(stderr,"Cannot open outputfile.\n");
fwrite(msg,1,strlen(msg)+1,stream);
fread(buf,strlen(msg)+1,1,stream);
五、c语言fread()返回总是0
1、返回0通常是读到了文件尾。如果确认没有到文件尾,可以用ferror检查错误。
2、C语言中:fread是一个函数。从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。
函数原型:size_t fread( void*buffer, size_t size, size_t count, FILE*stream);
size要读的每个数据项的字节数,单位是字节
count要读数据项的个数,每个数据项size个字节.
返回实际读取的元素个数。如果返回值与count不相同,则可能文件结尾或发生错误。从ferror和feof获取错误信息或检测是否到达文件结尾。
if((stream=fopen("DUMMY.FIL","w+"))==NULL)
fprintf(stderr,"Cannotopenoutputfile.\n");
fwrite(msg,1,strlen(msg)+1,stream);
fread(buf,strlen(msg)+1,1,stream);
六、C语言大文件操作疑问(fseek)
1、如果是你是32操作系统,c语言操作文件的大小是 2^31,2G
2、如果是你是64操作系统,c语言操作文件的大小是.2^63,8589934592 G
3、你说的问题肯定,出在32位操作系统上。
4、操作系统能不能允许创建2G以上的文件了,具体要看操作系统了。
5、如果不允许,你的问题就没什么意义了!
6、如果操作系统允许的话,都会提供,系统函数让你调用的。
7、你可以看一下,sqlite的源代码,我的3-5-4版本
8、他不用是用c语言标准库的。函数,能windows提供的系统函数SetFilePointer,ReadFile
9、 sqlite3_file*id,/* File to read from*/
10、 void*pBuf,/* Write content into this buffer*/
11、 int amt,/* Number of bytes to read*/
12、 sqlite3_int64 offset/* Begin reading at this offset*/
13、 LONG upperBits=(offset>>32)& 0x7fffffff;
14、 LONG lowerBits= offset& 0xffffffff;
15、 SimulateIOError(return SQLITE_IOERR_READ);
16、 OSTRACE3("READ%d lock=%d\n", pFile->h, pFile->locktype);
17、 rc= SetFilePointer(pFile->h, lowerBits,&upperBits, FILE_BEGIN);
18、 if( rc==INVALID_SET_FILE_POINTER&& GetLastError()!=NO_ERROR){
19、 if(!ReadFile(pFile->h, pBuf, amt,&got, 0)){
20、 memset(&((char*)pBuf)[got], 0, amt-got);
21、 return SQLITE_IOERR_SHORT_READ;
关于fseek返回值和fseek和lseek的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。