很菜的,怎样将Edit中的字符串存盘到文件中

alanwang 2001-08-02 01:45:30
我想将Edit中的字符串放到一个变量中,先在屏幕上显示出,然后存盘。以后把他读出来,又可以显示。
我开始用的是AnsiString变量,结果存盘时出问题了,我估计是AnsiString存的是指针,没有将字符串存到文件中去。

struct fileinfo
{
AnsiString a;
AnsiString b;
.....
}nowinfo;

nowinfo.a=Edit1->Text;
.....
iFileHandle=FileCreate(SaveDialog1->FileName);
FileWrite(iFileHandle,&nowinfo,sizeof(nowinfo) );
FileClose(iFileHandle);
后来,我想用char* 代替AnsiString,
char *a;
*a=Edit1->Text.c_str();
编译出错

我该怎么办呢,~~~~555555555



...全文
279 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
alanwang 2001-08-03
  • 打赏
  • 举报
回复
结帐了
wangxd 2001-08-02
  • 打赏
  • 举报
回复
不要用ansistring,尽量用tstringlist
「已注销」 2001-08-02
  • 打赏
  • 举报
回复
晚了
luhongjun 2001-08-02
  • 打赏
  • 举报
回复
dingzhenhhy(人言落日是天涯,望及天涯不见家(快疯了) 的方法是最好的.建议使用.
alanwang 2001-08-02
  • 打赏
  • 举报
回复
我今天撞....
(2001-8-2 14:47:30) 的那段代码我现在又运行了一遍,什么问题也没有,一切正常!!!
下午电脑前可是有三个人看见当时运行的不正常,大家都百思不得其解。
一切皆因为:我重装了一次cb5。但重装前我编译其他一切正常,就这段代码不对,后来我将其改为以下代码,在有问题的cb5上也通过了

struct fileinfo
{
char a[20];
char b[20];
}nowinfo;

strcpy(nowinfo.a ,Edit1->Text.c_str());
ShowMessage(nowinfo.a);
// savefile....

看来各种方案都是对的,多谢了,我再学习一下,明天给大家加分。
wjzhuang 2001-08-02
  • 打赏
  • 举报
回复

struct fileinfo
{
char *a;
char *b;
}nowinfo;


放在头文件的private:里面
路人丁 2001-08-02
  • 打赏
  • 举报
回复
纯文本形式

String sTextName=Form1->sPPath+"db\\GuCnt.txt";
int i=1;//i为存在第i行位置
TStringList *list=new TStringList; //打开文件
list->LoadFromFile(sTextName.c_str());
list->Strings[i]=Edit1->Text;
list->SaveToFile(sTextName.c_str());
delete list;
gqxs 2001-08-02
  • 打赏
  • 举报
回复
不用 char 也行

struct fileinfo
{
AnsiString a;
AnsiString b;
.....
}nowinfo;

nowinfo.a=Edit1->Text;
.....
iFileHandle=FileCreate(SaveDialog1->FileName);
FileWrite(iFileHandle,&nowinfo[1],nowinfo.Lenth());
FileClose(iFileHandle);
alanwang 2001-08-02
  • 打赏
  • 举报
回复
wjzhuang(痛苦中的程序猪) 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
struct fileinfo
{
char *a;
char *b;
}nowinfo;

nowinfo.a=Edit1->Text.c_str();

ShowMessage(nowinfo.a);
}

我刚试过,以上代码,在edit中输入1-3个字母时,showmessage没有显示,输入4个或以上字母时,一切正常,我,我.......
wjzhuang 2001-08-02
  • 打赏
  • 举报
回复
alanwang:
不会呀,是原来的内容,我试过了
Sephil 2001-08-02
  • 打赏
  • 举报
回复
个人认为 ddeng(登登) 的方法比较好
alanwang 2001-08-02
  • 打赏
  • 举报
回复
To: wjzhuang(痛苦中的程序猪) 
ShowMessage(nowinfo.a);这句显示出来的,已经不是原来Edit1里的内容了,这是怎么回事

ddeng 2001-08-02
  • 打赏
  • 举报
回复
嘻嘻,读出写错了:(多了个"="
应该是:
nowinfo.a = pStrs->Values["a"];
nowinfo.b = pStrs->Values["b"];
抬头看路 2001-08-02
  • 打赏
  • 举报
回复
有一个问题,从c_str()中的到的指针用不用释放?
wjzhuang 2001-08-02
  • 打赏
  • 举报
回复

如何改写呢?
ddeng 2001-08-02
  • 打赏
  • 举报
回复
用TStringList啊!
保存:
//--------------
struct fileinfo
{
AnsiString a;
AnsiString b;
.....
}nowinfo;

nowinfo.a=Edit1->Text;
.....
TStringList *pStrs = new TStringList();
pStrs->Add("a="+nowinfo.a);
pStrs->Add("b="+nowinfo.b);
.....
pStrs->SaveToFile(SaveDialog1->FileName);
delete pStrs;
//-------------
读出:
TStringList *pStrs = new TStringList();
pStrs->LodFromFile(OpenDialog1->FileName);
nowinfo.a = pStrs->Values["a="];
nowinfo.b = pStrs->Values["b="];
.....
delete pStrs;
gloom 2001-08-02
  • 打赏
  • 举报
回复
可以考虑把它存为纯文本文件吗(*.txt)?
这我倒做过。
HEROIN 2001-08-02
  • 打赏
  • 举报
回复
FileWrite(iFileHandle,&nowinfo,sizeof(nowinfo) );是错误的
你保存的是结构(两个指针的实际数值),而非结构指向的内容

sizeof(nowinfo) 将始终为8(2个指针)





wjzhuang 2001-08-02
  • 打赏
  • 举报
回复
就是在保存的文件中看到的数值很乱
书生 2001-08-02
  • 打赏
  • 举报
回复
c_str()是将一个String型转化为Char*
加载更多回复(4)

13,874

社区成员

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

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