头文件有什么区别???

Henry_hzl 2002-04-02 11:24:53
我在VC中写标准C++的程序,用ifstream和FILE对文件进行操作
程序无法正常运行,头文件我改了又改,不是函数退出时候出错
就是函数运行时出错,实在不懂,请高手指教
下面是我的一部分关键代码:(估计问题就在这儿,编译没有问题)
#include <fstream.h>
#include <string.h>
#include <stdio.h>
using namespace std;

int AddKey(char* filename,char* fieldname,char* keyname,char* value)
{
char* keyvalue,*buffer,*field,*key,*tail;
bool findfield(false),findkey(false);
long station(0);

FILE *outfile,*output; // outfile指向要修改的文件,output指向临时文件;
keyvalue=new char[255];
tail=new char[255];
buffer=new char[8];
memset(buffer,0,sizeof(buffer));
field=new char[255];
key=new char[255];
ifstream input;
input.open(filename,ios::in|ios::binary);
if(!input.good())
{
MessageBox(NULL,"错误三","打开指定文件错误",MB_OK);
return 3; //如果错误,返回"error3"
}
input.seekg(0,ios::beg);

while( !input.eof() && *key!=*keyname) //遍历全文
{ //1

input.read(buffer,1);

//string buff(buffer);
//string e=buff.substr(0,1);
if(buffer[0]=='[')
{//2
//field=buffer;
input.getline(field,255,']');

if (*field==*fieldname)
{ //3
findfield=true;
input.getline(tail,255,'\n');
station=input.tellg(); //获得输入起始点;
/*while(!input.eof() && *key!=*keyname)
{//4

input.getline(key,255,'=');
if(key[0]=='[') //域内搜寻完毕,没有查到结果。
break;
if(*key==*keyname)
{
findkey=true;
return 4; //意味所要添加的Key已存在
}
input.getline(tail,255,'\n');
}//4*/
char tempfile[sizeof(*filename)]; // memset(tempfile,0,sizeof(*filename));
//tempfile=filename;
int i=strlen(filename);
strncpy(tempfile,filename,strlen(filename));
strcat(tempfile,".asc");
//tempfile+=".asc";
//strncpy( keyvalue, keyvalue1,255 );
//char* tem=new char[tempfile.length()];
//sprintf(tem,"%s",tempfile);
outfile=fopen(filename,"r+");
output=fopen(tempfile,"w+");
int result=fseek(outfile,0,SEEK_END);
int length=ftell(outfile);
result=fseek(outfile,station,SEEK_SET);
int letter(0),numread(0),numwrite(0);
while(ftell(outfile<length) //读入剩余部分到临时文件;
{
numread = fread( buffer, sizeof(char), strlen(buffer), outfile);
numwrite= fwrite( buffer, sizeof(char), strlen(buffer), output);
}
result=fseek(outfile,station,SEEK_SET); //插入
numwrite= fwrite( keyname, sizeof(char), strlen(keyname), outfile);
numwrite= fwrite( "=", sizeof(char), 1, outfile);
numwrite= fwrite( value, sizeof(char), strlen(value), outfile);
numwrite=fwrite("\n", sizeof( char ), 1, outfile);
result=fseek(output,0,SEEK_SET);
while(!feof(output)) //从临时文件读回到要修改的文件;
{
numread = fread( buffer, sizeof( char ), strlen(buffer), output);
numwrite= fwrite( buffer, sizeof( char ), numread, outfile);
}
break; //跳出异常;
}//3
}//2
else
input.getline(tail,255,'\n');
}//1
delete keyvalue;
//delete keyvalue1;
//delete keyvalue2;
delete buffer;
delete field;
delete key;
delete tail;
if(findfield==false)
{
//AfxMessageBox("Can't find the field!");
return 1;
}
fclose(output);
input.close();
return 0;
}
...全文
394 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingkl 2002-04-02
  • 打赏
  • 举报
回复
<fstream.h>与<fstream>只不过namespace不一样
Henry_hzl 2002-04-02
  • 打赏
  • 举报
回复
addkey函数作用是在固定文件格式中指定位置添加Key和KeyValue
文件格式如下:
[field1]
Key1=....
Key2=....
[field2]
Key3=.....
Key4=......
...

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧