fseek返回值(fseek和lseek)

admin 381 0

很多朋友对于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的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。