c语言fseek(fseek函数详解)

admin 331 0

大家好,如果您还对c语言fseek不太了解,没有关系,今天就由本站为大家分享c语言fseek的知识,包括fseek函数详解的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

一、C语言文件问题fseek定位

我前几天也碰到fseek问题,体会颇深。

1、你打开的方式是什么?比如r还是rb?这两者差别特别大。

2、暂且不论r或rb,你这个文件从开头到10的位置是什么字符,空格?空行?ascii字符?或者其他?建议找个可以查看16进制的软件打开看看,比如ultraedit。然后再觉得偏移量是多少。

3、由于文件需要打开才能操作,检查一下路径和函数使用问题。如果是当前目录,那直接fp=fopen("我的bin","rb")或者

fp=fopen("我的bin","r"),再fseek(fp,10,0)。如果不是当前目录,记得目录符号"\"在c语言里头需要使用转义字符才能实现,也就是"\\"才能实现"\",比如fp=fopen("c:\\我的bin","rb")。

基本上以上三点可以解决fseek读不出内容的问题。

二、c语言fseek问题

我前几天也碰到fseek问题,体会颇深。

1、你打开的方式是什么?比如r还是rb?这两者差别特别大。

2、暂且不论r或rb,你这个文件从开头到10的位置是什么字符,空格?空行?ASCII字符?或者其他?建议找个可以查看16进制的软件打开看看,比如Ultraedit。然后再觉得偏移量是多少。

3、由于文件需要打开才能操作,检查一下路径和函数使用问题。如果是当前目录,那直接fp=fopen("我的BIN","rb")或者 fp=fopen("我的BIN","r"),再fseek(fp,10,0)。如果不是当前目录,记得目录符号"\"在C语言里头需要使用转义字符才能实现,也就是"\\"才能实现"\",比如fp=fopen("c:\\我的BIN","rb")。

基本上以上三点可以解决fseek读不出内容的问题。

三、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;

四、在C语言中fseek()的功能

1、fseek()是重定位流(数据流/文件)上的文件内部位置指针。

2、注意:文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变或指向别的文件。

3、如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset取值大于等于2*1024*1024*1024,即long的正数范围2G),则不改变stream指向的位置,函数返回一个非0值。

4、fseek函数的文件指针,应该为已经打开的文件。如果没有打开的文件,那么将会出现错误。 fseek函数也可以这样理解,相当于在文件当中定位。

5、这样在读取规律性存储文件时可以利用其OFFSET偏移量读取文件上任意的内容。

6、fseek函数一般用于二进制文件,也可以用于文本文件。用于文本文件操作时,需特别注意只有fseek(fp, 0, SEEK_SET)和 fseek(fp, ftell(fp), SEEK_SET)能确保结果符合预期。

五、求教c语言中fgets的用法

从流中读一行或指定个字符,原型是char*fgets(char*s,intn,FILE*stream);从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。

*string结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针fgets的返回值是个指针,*fgets(buffer,100,stdin)就是取返回指针所指向地址的第一个字符,fgets的返回值是char*.要是输入一串字符,返回的第一字符一定不是\n如果要是一个空行,第一个一定是\n,所以会推出循环,如果while中的两个条件都满足,就会进入循环继续计算。

一、函数原型是:char*fgets(char*s, int n, FILE*stream);

从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果文件中的该行,不足bufsize-1个字符,则读完该行就结束。

如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。

函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。

二、与gets相比使用这个好处是:读取指定大小的数据,避免gets函数从stdin接收字符串而不检查它所复制的缓存的容积导致的缓存溢出问题。

1、《UNIX环境高级编程》中指出,每次调用fgets函数会造成标准输出设备自动刷清!案例详见《UNIX环境高级编程(第二版)》中程序清单1-5和课后习题5.7,习题5.7的答案中给出了相关的论述。

2、初入门者,大多数是在WINDOWS下,使用VS进行练习的。此环境下,对注意1中的情况进行测试,并不能看到案例中所描述的情景,因为具体的实现不同。

stream文件流指针体指向文件内容地址的偏移原则

如果一个文件的当前位置的文本如下

如果用fgets(str1,6,file1);去读取

则执行后str1="Love,",读取了6-1=5个字符

这个时候再执行fgets(str1,20,file1)则执行后str1=" I Have\n"

则执行str1="Love,I Have",读取了一行(包括行尾的'\n',并自动加上字符串结束符'\0'),当前文件位置移至下一行,虽然23大于当前行上字符总和,可是不会继续到下一行。而下一次调用fgets()继续读取的时候是从下一行开始读。

六、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);

七、C语言中frewind, fseek, ftell怎么用

我感觉如果是二进制模式打开二进制文件的话可能会不一样吧,如果文件中存储的是二进制的整数,在文本模式下打开的时候每个字节只对应这个整数十进制中的一位,这样一个5位的十进制数就可能占5个字节,而二进制下只用4个字节来存储,也就只占4个字节。

关于c语言fseek的内容到此结束,希望对大家有所帮助。