[c/c++] 文件指针位置回到文件开头(rewind)及行开头(ftell+fseek)

待读入文件

1.greenteemo
2.csdn
3.blog

代码,详细说明见注释

#include 

#define LENGTH_OF_LINE 1024

int main(){
    FILE *fp = fopen("file.txt", "r");   // 打开文件
    char line[LENGTH_OF_LINE];
    while( fgets(line, LENGTH_OF_LINE, fp) ){
        printf("%s\n", line);            // 读取文件内容
    }

    // back to beginning of file   
    // 当前文件指针指向文件末尾
    printf("=== back to beginning of file ===\n");
    rewind(fp);   // 回到文件最开头
    fgets(line, LENGTH_OF_LINE, fp);    // 读入第一行,此时文件指针指向第二行开头
    printf("current line : %s\n", line);

    // back to beginning of line
    printf("=== back to beginning of line ===\n");
    fgets(line, LENGTH_OF_LINE, fp);   // 读入第二行,此时文件指针指向第三行开头
    long offset = ftell(fp);           // 记录第三行开始的位置与文件开头的偏置值
    fgets(line, LENGTH_OF_LINE, fp);   // 读入第三行,此时文件指针指向文件末尾
    printf("current line :%s\n", line);
    fseek(fp, offset, SEEK_SET);       // 根据offset回到第三行开头 
    fgets(line, LENGTH_OF_LINE, fp);   // 读入第三行,此时文件指针指向文件末尾     
    printf("current line :%s\n", line);

    return 0;
}

输出

1.greenteemo

2.csdn

3.blog
=== back to beginning of file ===
current line : 1.greenteemo

=== back to beginning of line ===
current line :3.blog
current line :3.blog

 

你可能感兴趣的:(c/c++)