当前位置:   article > 正文

C/C++:文件读写之文件指针定位_c文件指针读取位置

c文件指针读取位置

问题描述

文件读写时C/C++使用过程中最为常见也最为平凡的操作,其中一个比较重要的事情是对文件指针进行操作,例如重新读写文件(即将文件指针重新移动到文件开头)。
本博客主要介绍在C和C++中分别对文件指针进行操作。为了更方便介绍,本文使用将文件指针移动到文件开头作为示例。

示例文件

test.txt

1 Hello
2 World
  • 1
  • 2

代码功能

打开一次文件,并重复读写两次。

代码

C

#include <stdio.h>

#define MAX_LENGTH 255

int main()
{
  FILE *fp = NULL;
  fp = fopen("test.txt","r");

  if(fp==NULL)
  {
    return -1;
  }

  char temp_line[MAX_LENGTH];
  while(!feof(fp))
  {
    fgets(temp_line,MAX_LENGTH,fp);
    printf("%s\n",temp_line);
  }

  //移动文件指针到文件开头
  rewind(fp);

  while(!feof(fp))
  {
    fgets(temp_line,MAX_LENGTH,fp);
    printf("%s\n",temp_line); 
  }  

  fclose(fp);

  return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

C++

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
  ifstream file;
  file.open("test.txt",ios::in);
  if(!file)
  {
    return -1;
  }

  while(file.good() && !file.eof())
  {
    string temp_line;
    std::getline(file,temp_line);
    std::cout<<temp_line<<std::endl;
  }

  //将文件指针移动到文件开头
  file.clear(std::ios::goodbit);
  file.seekg(std::ios::beg);

  while(file.good() && !file.eof())
  {
    string temp_line;
    std::getline(file,temp_line);
    std::cout<<temp_line<<std::endl;
  }

  file.close();

  return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

代码讲解

在C代码中,我们使用了rewind()函数将文件指针从当前位置移动的文件开头,除此之外还有以下函数可以文件指针进行操作,如下:

  1. fseek函数
  2. fsetpos函数

在C++代码中,我们使用了seekg()对读文件指针进行操作,除此之外还有seekp()对写文件进行操作。不过此处有一个特殊情况需要注意,因为首先读取一次读取到文件末尾,因此此时的流状态时eof,需要将其设置为goodbit才能成功将文件指针移动到文件开头。clear函数参考C++的官方文档

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/208434
推荐阅读
相关标签
  

闽ICP备14008679号