修改文件某条记录的方式,除了一下方式外,还可以使用c++大学教程里面所说的fstream的方式
但是fstream方式非常不好用,体现在两个方面:一、在第一次seekp后是正确的,当修改某条记录后
再次seekp,就会发现位置不正确,可能不起作用了。第二、同一个 fstream insertInFile,第一次open
没问题,当某个原因,在同一程序关闭close后,再次open同一个文件,就会返回错误。同时还可能有其他问题,因此 fstream 方式非常不好用!没有下面的稳定,但是它的思路非常好,使用对象方式确定seek大小,以下就采用这种方式实现!
// ytest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
struct mystruct{
int i;
int b;
int c;
} abc;
void ReadAll(FILE *mf)
{
mystruct cdf;
while((fread(&cdf,sizeof(mystruct),1,mf))>0)
{
cout << " 11 " << cdf.i << " 1b " << cdf.b << " c " << cdf.c<< endl;
}
}
FILE * fd = NULL;
/************************************************************************/
/* 读取和创建配置文件,用于建立日志信息 */
/************************************************************************/
bool ReadConfig()
{
if ( fd)
{
//获取文件中一行
ReadAll(fd);
//修改第五行
fseek(fd,(5-1) * sizeof(mystruct),SEEK_SET);
abc.i = 11;
abc.b = 21;
abc.c = 31;
if(fwrite(&abc, sizeof(mystruct), 1, fd) != 1)
cout << "file write error.\n"<< endl;
fflush(fd);
fseek(fd,0,SEEK_SET);
ReadAll(fd);
fclose(fd);
}
return true;
}
/************************************************************************/
/* 写入日志文件,记录相应配置信息 */
/************************************************************************/
bool WriteConfig()
{
abc.i = 1;
abc.b = 2;
abc.c = 3;
//清空文件
if ((fd = fopen("abc.txt","w+")) != NULL)//把是本表的数据去掉
{
for (int i = 0 ; i < 10; i++)
{
abc.i = i;
abc.b = i;
if(fwrite(&abc, sizeof(mystruct), 1, fd) != 1)
cout << "file write error.\n"<< endl;
}
}
//保存新记录
fflush(fd);
fseek(fd,0,SEEK_SET);
return true;
}
int main()
{
WriteConfig();
ReadConfig();
return 0;
}
阅读(2431) | 评论(0) | 转发(0) |