急:请问如何在一个文本文件特定内容后面插入信息

qiang312 2003-10-20 09:05:24
急:请问如何在一个文本文件特定内容后面插入信息
我用FileSeek 时的内容变成乱码了 高人请指点!!
...全文
91 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hatumei 2003-10-23
  • 打赏
  • 举报
回复
int length=0;
for(int i=0;i<Memo1->Lines->Count;i++)
{
length=length+Memo1->Lines->Strings[i].Length()+2;
}
if(length>0) length=length-2;
Memo1->SetFocus();
Memo1->SelStart=length;
Memo1->SelLength=1;
qiang312 2003-10-22
  • 打赏
  • 举报
回复
UP
hatumei 2003-10-21
  • 打赏
  • 举报
回复
有两个错误,更正一下
void InsertFile(const AnsiString FileName, int from,const AnsiString content)
{
FILE *stream;
stream= fopen(FileName.c_str(),"r+");
fseek(stream, 0L, SEEK_END);
int length = ftell(stream);
fseek(stream, from, SEEK_SET);
char* tail=new char[length-from+1];
fread(tail,length-from,1,stream);
tail[length-from]=0;
fseek(stream, from, SEEK_SET);
fprintf(stream, content.c_str());
fprintf(stream, tail);
delete[] tail;
fclose(stream);
}
sprewellkobe 2003-10-21
  • 打赏
  • 举报
回复
你把代码帖出来看看
GeoPhoenix 2003-10-21
  • 打赏
  • 举报
回复
文本文件不能用FileSeek定位的,必须通盘处理,将所有的内容读入内存,再进行相应的处理,处理完后再写入文件。
blankman 2003-10-21
  • 打赏
  • 举报
回复
一定要对文件进行操作吗?可不可以到memo里转一下,这样就轻松多了
hatumei 2003-10-21
  • 打赏
  • 举报
回复
void InsertFile(const AnsiString& FileName, int from,const AnsiString& content)
{
FILE *stream;
stream= fopen(FileName.c_str(),"r+");
fseek(stream, 0L, SEEK_END);
int length = ftell(stream);
fseek(stream, from, SEEK_SET);
char* tail=new char[length-from+1];
fread(tail,length-from,1,stream);
fseek(stream, from, SEEK_SET);
fprintf(stream, content.c_str());
fprintf(stream, tail);
delete tail;
fclose(stream);
}
qiang312 2003-10-21
  • 打赏
  • 举报
回复
谢谢各位

我的文本文件有几百k而且有中文 我现在用Memo来做 有个小问题:怎么把memo的插入点定位到文本的最后啊?

thanks
yhz 2003-10-21
  • 打赏
  • 举报
回复
要避免这种情况出现,最好用 widestring 或者 unicode 来做。
Coolyu0916 2003-10-21
  • 打赏
  • 举报
回复
bool __fastcall TfrmMain::AppendWrite(const AnsiString& FileName, const AnsiString& content)
{
try
{
ofstream out(FileName.c_str(),ios::app);
out << content.c_str() << "\r\n";
out.close();
return true;
}
catch(...)
{
ShowMessage("Err to Write File" + FileName);
return false;
}
}
Coolyu0916 2003-10-21
  • 打赏
  • 举报
回复
用追加的方式打开文件不可以么??
weibz0525 2003-10-21
  • 打赏
  • 举报
回复
文件不是很大可以用TStingList载入到内存进行处理,方便又简单。
yjy1001 2003-10-21
  • 打赏
  • 举报
回复
文件不是很大可以用TStingList载入到内存进行处理,方便又简单

上楼的插入,还是会出现 乱吗的问题的

最好用 widestring 或者 unicode 来做,因为文字在widestring 或者 unicode 是一个字符
而不通常的2个,所以不会出现插进中文中间的情况。
pzoon 2003-10-21
  • 打赏
  • 举报
回复
zihan 2003-10-20
  • 打赏
  • 举报
回复
FileSeek的时候要注意到中文,因为中文是两个字节,比如说 abc你

那么你的fileseek如果找到的位置是4那么就是你的一半,当然你插入了过后肯定会乱码,所以建议你插入之前检查一下他的值,如果是中文,那么向前或者向后移动一个.然后进行插入

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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