赞
踩
文件读写时C/C++使用过程中最为常见也最为平凡的操作,其中一个比较重要的事情是对文件指针进行操作,例如重新读写文件(即将文件指针重新移动到文件开头)。
本博客主要介绍在C和C++中分别对文件指针进行操作。为了更方便介绍,本文使用将文件指针移动到文件开头作为示例。
test.txt
1 Hello
2 World
打开一次文件,并重复读写两次。
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;
}

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;
}

在C代码中,我们使用了rewind()函数将文件指针从当前位置移动的文件开头,除此之外还有以下函数可以文件指针进行操作,如下:
在C++代码中,我们使用了seekg()对读文件指针进行操作,除此之外还有seekp()对写文件进行操作。不过此处有一个特殊情况需要注意,因为首先读取一次读取到文件末尾,因此此时的流状态时eof,需要将其设置为goodbit才能成功将文件指针移动到文件开头。clear函数参考C++的官方文档。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。