AnsiString 定义数组并写入文件的问题

麻酱面条 2015-12-06 10:32:51
想定义个AnsiString的数组存储字符串,然后写到文件里,再读出来。

//定义字符串数组
AnsiString BiaoTou[5];
BiaoTou[0]="名称";
BiaoTou[1]="xinghao";
BiaoTou[2]="220";
BiaoTou[3]="20151010 10:10:10";
BiaoTou[4]="备注";
//写入文件
int fh = FileCreate("c:\\a.dat");
FileSeek(fh,0,0);
FileWrite(fh,BiaoTou,sizeof(BiaoTou));
FileClose(fh);
//读取文件
TMemoryStream *mf = new TMemoryStream();
mf->LoadFromFile("c:\\a.dat");
int count = mf->Seek(0,soFromEnd);
mf->Seek(0,soFromBeginning);
AnsiString temp[5];
mf->Read(temp,count);
for(int i=0;i<count;i++)
{
Memo1->Lines->Add(temp[i]);
}
delete mf;


基本的代码就这么多,半路出家学BCB,好多地方不太懂,请大家指点,谢谢。
...全文
270 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wryyu 2015-12-12
  • 打赏
  • 举报
回复
学习了
银点 2015-12-10
  • 打赏
  • 举报
回复
TStringStream
银点 2015-12-10
  • 打赏
  • 举报
回复
引用 8 楼 sirit 的回复:
[quote=引用 7 楼 silverpot 的回复:] 既然都是AnsiString类型的字符串,你可以借助TMemo组件,我经常这样干 写入:

Memo1->Lines->Add("一个串");
//N个Add方法,最后存文件
Memo1->Lines->SaveToFile("c:\\a.bat");

读写出来:
Memo1->Lines->LoadFromFile("C:\\a.bat");
//Memo一行就是一个串。
for(int i = 0;i<Memo1->Lines->Count;i++)
{
    Memo1->Lines->Strings[i]
}
如果你不想让Memo出现在窗口中,就设置Memo1->Visible = false;
我也经常用你这个方法,不过存在的问题就是Memo控件响应有点慢,还有就是数据量太大不适合用,大约1G多的文本.[/quote] 你为什么不能一次把问题说完?! 那就用TFileStream
麻酱面条 2015-12-10
  • 打赏
  • 举报
回复
引用 7 楼 silverpot 的回复:
既然都是AnsiString类型的字符串,你可以借助TMemo组件,我经常这样干 写入:

Memo1->Lines->Add("一个串");
//N个Add方法,最后存文件
Memo1->Lines->SaveToFile("c:\\a.bat");

读写出来:
Memo1->Lines->LoadFromFile("C:\\a.bat");
//Memo一行就是一个串。
for(int i = 0;i<Memo1->Lines->Count;i++)
{
    Memo1->Lines->Strings[i]
}
如果你不想让Memo出现在窗口中,就设置Memo1->Visible = false;
我也经常用你这个方法,不过存在的问题就是Memo控件响应有点慢,还有就是数据量太大不适合用,大约1G多的文本.
缘中人 2015-12-08
  • 打赏
  • 举报
回复
字符串的换行
	TStringList * sl;
	sl = new TStringList();
	sl->Add("名称");
	sl->Add("xinghao");
	sl->Add("220");
	sl->Add("20151010 10:10:10");
	sl->Add("备注");
	sl->SaveToFile("d:\\a.dat");

//	TMemoryStream *ms;
//	ms = new TMemoryStream();
//	TBytes bs = sl->Text.BytesOf();
//	ms->WriteData(bs, bs.Length);
//	ms->SaveToFile("d:\\a.dat");

	// 写入文件
//	int fh = FileCreate("d:\\a.dat");
//	FileSeek(fh, 0, 0);
//	FileWrite(fh, &bs[0], bs.Length);
//	FileClose(fh);

	// 读取文件
	sl->Clear();
	TMemoryStream *mf = new TMemoryStream();
	mf->LoadFromFile("d:\\a.dat");
//	int count = mf->Seek(0, soFromEnd);
//	mf->Seek(0, soFromBeginning);
	sl->LoadFromStream(mf);
	Memo1->Text = sl->Text;
	delete mf;

	delete sl;
//	delete ms;
银点 2015-12-08
  • 打赏
  • 举报
回复
既然都是AnsiString类型的字符串,你可以借助TMemo组件,我经常这样干 写入:

Memo1->Lines->Add("一个串");
//N个Add方法,最后存文件
Memo1->Lines->SaveToFile("c:\\a.bat");

读写出来:
Memo1->Lines->LoadFromFile("C:\\a.bat");
//Memo一行就是一个串。
for(int i = 0;i<Memo1->Lines->Count;i++)
{
    Memo1->Lines->Strings[i]
}
如果你不想让Memo出现在窗口中,就设置Memo1->Visible = false;
我不懂电脑 2015-12-07
  • 打赏
  • 举报
回复
二进制存储用byte数组或void * buffer,用fwrite函数写文件
麻酱面条 2015-12-07
  • 打赏
  • 举报
回复
引用 4 楼 songhtao 的回复:
二进制存储用byte数组或void * buffer,用fwrite函数写文件
但是我想存储很多字符串,好多万行,存储成文件,要求一个是节省空间,再就是读写快速方便,请继续指导,多谢。
麻酱面条 2015-12-07
  • 打赏
  • 举报
回复
想用二进制存储,因为这只是表头,紧接着还有采集的波形数据。用二进制会节省空间吧。
缘中人 2015-12-06
  • 打赏
  • 举报
回复
是明文存储还是二进制存储
void __fastcall TForm6::FormCreate( TObject * Sender )
{
	TStringList * sl;
	sl = new TStringList( );
	sl->Add( "名称" );
	sl->Add( "xinghao" );
	sl->Add( "220" );
	sl->Add( "20151010 10:10:10" );
	sl->Add( "备注" );
	sl->SaveToFile( "c:\\a.dat" );
	delete sl;


	sl->LoadFromFile( "c:\\a.dat" );
	sl->Strings[ 0 ];
	sl->Strings[ 1 ];
	sl->Strings[ 2 ];
}
麻酱面条 2015-12-06
  • 打赏
  • 举报
回复
现在在for语句读取的时候报错。

13,825

社区成员

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

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