快捷搜索:  汽车  科技

linuxc语言怎么获取文件大小(如何使用fseek随意移动读写数据)

linuxc语言怎么获取文件大小(如何使用fseek随意移动读写数据)SEEK_END: 文件结尾SEEK_CUR: 当前位置int fseek( FILE *stream long offset int origin);函数说明:移动stream文件指针,从origin地址开始,移动offset个偏移字节。那么,origin参数有如下的取值:SEEK_SET: 文件开头

随机读写文件

当调用fopen()函数打开一个文件的时候,返回一个文件指针,指向打开的文件。得到的文件指针,指向文件的起始位置。

所以,调用fopen()函数打开一个文件指针,接着调用fread()、fwrite()函数对文件进行读写操作,都是从文件的起始位置进行读写操作。

那么,如果文件有30个字节,想调用fopen()打开文件之后,可以跳到第9个字符进行读取,只读取第9个字符?

C语言提供了fseek()函数,可以实现该操作。fseek()函数的定义如下:

int fseek( FILE *stream long offset int origin);

函数说明:移动stream文件指针,从origin地址开始,移动offset个偏移字节。那么,origin参数有如下的取值:

SEEK_SET: 文件开头

SEEK_CUR: 当前位置

SEEK_END: 文件结尾

其中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字节处。

参数offset为偏移量,正数表示正向偏移,负数表示负向偏移。

返回值:成功返回0,失败返回-1。

文件指针经过跳转之后,可以调用rewind()函数,把文件指针恢复到文件的起始位置。该函数的定义如下:

void rewind(FILE *stream);

函数说明:把参数stream指向的文件指针,恢复到文件的起始位置。

如下是一个程序测试例子:

linuxc语言怎么获取文件大小(如何使用fseek随意移动读写数据)(1)

在编译运行程序之前,我们先创建test.txt文件,准备测试的数据,如下:

linuxc语言怎么获取文件大小(如何使用fseek随意移动读写数据)(2)

此时,创建test.txt文件,并存放 "ABCDEF" 字符串。然后,查看该文件的数据。

linuxc语言怎么获取文件大小(如何使用fseek随意移动读写数据)(3)

此时,准备的测试文件完成。然后,编译运行程序:

linuxc语言怎么获取文件大小(如何使用fseek随意移动读写数据)(4)

可以看到,打开test.txt文件的时候,fp文件指针指向文件的首地址。就是指向字符'A',然后,调用fseek()往后移动3个字节,指向字符'D'。

那么,调用fgetc()函数读取一个字符,就读取到字符'D'。然后,调用rewind()函数,把文件指针恢复到起始地址。接着调用fseek()函数,移动到SEEK_END指向的文件末尾,同时offset设置为“负数”,那么,就往回移动。所以,从文件的末尾往回移动。

fseek(fp -3 SEEK_END);

c = fgetc(fp); //往回移动3个字节,读取字符 E;

fseek(fp -2 SEEK_END);

c = fgetc(fp); //往回移动2个字节,读取字符 F;

fseek(fp -1 SEEK_END);

c = fgetc(fp); //往回移动1个字节,读取字符串结束符; 注意,还需要考虑字符串结束符。

所以,可以随意移动文件指针,读取指定偏移地址处的数据。调用fseek()函数,可以移动文件指针,读取指定位置处的数据。

猜您喜欢: