首页 > 编程笔记 > C语言笔记 阅读:10

C语言fseek()随机读写文件(图文并茂,附带实例)

在 C语言中,文件偏移(也称为文件指针或文件位置)表示当前在文件中的位置,用于读取和写入操作。

当使用 fopen() 函数打开一个文件时,文件偏移通常被设置为文件开头(对于读模式)或文件结尾(对于追加模式)。

实际上,文件结构中保存了一个表示当前文件读写位置的指针。在 fopen() 函数打开文件后,这个指针指向文件中的第一个字节。当任意文件操作函数读写相应长度的字节后,指针也会偏移相应的长度。

例如,每次 fgetc() 函数获取一个字节时,文件指针都会向后移动一个字节,如下图所示:


图 1 fgetc()函数读取一个字符

每次 fgets() 函数获取一行字符时,文件指针都会向后移动到下一行开始,如下图所示:


图 2 fgets()函数获取一行字符

要在 C语言中操作文件偏移,可以使用 fseek()。

fseek() 函数用于设置文件偏移至指定位置,fseek() 函数的语法格式如下:
int fseek(FILE * stream, long offset, int origin);
参数说明:
例如,若要从文件开头偏移 5 字节,使文件指针指向 'a',可使用以下代码:
fseek(pFile, 5, SEEK_SET);
下图展示了偏移的过程:


图 3 从文件开头偏移5字节

若要从文件结尾偏移 -5 字节,使文件指针指向 'i',可使用以下代码:
fseek(pFile, -5, SEEK_END);
下图展示了偏移的过程。需要注意的是,SEEK_END 是从文件最后一个字符的下一个开始进行偏移的,而不是从最后一个字符 \n 开始偏移。


图 4 从文件结尾偏移-5字节

下面是一个使用 fseek() 函数设置文件偏移至指定位置的实例:
#include <stdio.h>
int main()
{
    FILE* pFile = fopen("data.txt", "r");
    if (pFile == NULL)
    {
        return -1;
    }
    char ch;
    // 从文件开头偏移 5 字节
    fseek(pFile, 5, SEEK_SET);
    ch = fgetc(pFile);
    putchar(ch);
    // 从文件结尾偏移-5 字节
    fseek(pFile, -5, SEEK_END);
    ch = fgetc(pFile);
    putchar(ch);
    fclose(pFile);
    return 0;
}
运行结果为:

ai

相关文章