社区
C++ Builder
帖子详情
如何将输出结果保存为文本?
ww425
2004-08-13 02:02:05
请教:1。如何在启动程序后EDIT组件中显示的内容是从文本中读出的数据?
2。这次修改好的数据如何再保存到文本中?
...全文
633
11
打赏
收藏
如何将输出结果保存为文本?
请教:1。如何在启动程序后EDIT组件中显示的内容是从文本中读出的数据? 2。这次修改好的数据如何再保存到文本中?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ww425
2004-08-17
打赏
举报
回复
谢谢大家!对于我这样的初学者,大家给了我莫大的帮助!本来枯燥的学习,现在来看大家讨论,变的生动了!
binbin
2004-08-14
打赏
举报
回复
对于配置信息的保存,现代程序一般都是读写注册表,绿色软件读写.ini文件比较好,看看
帮助中关于TIniFile的介绍和example.
当然如楼上所说,ini文件对于大量和复杂的数据不太适合,要知道文件读写是学一门语言最起码的训练.
问题生
2004-08-14
打赏
举报
回复
使用文件
使用文件来保存程序的配置,大概是现在不常用到的方法。因为对文件的操作是让很多初学头疼的事,但通过适当的方法,用文件保存数据还是非常方便和灵活的。
在BCB中使用文件常用的有如下几种方式。
A、用fopen,fwrite比较传统,但比较灵活。
B、使用Stream,如FileStream和MemoryStream,优点是比较方便。
使用文件保存数据我常用的是通过定义一个结构来进行,操作,如以下的结构
struct {
char UserName[10];//用户名
char PassWord[16];//用户密码
int Level[24]; //用户权限
}UserInfo;
这个结构用来保存程序使用者的一些信息,(我随便定义的不一定合理,只是作个例子)如果用注册表和INI文件来保存都很麻烦,可是如果用文件就很简单了。下面我分别用A、B两种方式来保存和读取。
下面的这两个例子用传统的文件读写方式来读写配置文件
#include <stdio.h>
bool __fastcall ReadConfig()
{
//读取配置文件
FILE * ptr;
AnsiString FileName=ExtractFileName(ParamStr(0))+"UserInfo.Dat";
ptr = fopen ( FileName.c_str(), "rb" );
if ( ptr == NULL )
{
ShowMessage ( "文件打开失败!" );
return false;
}
fseek ( ptr, 0L, SEEK_END );//定位到文件尾
if ( ftell ( ptr ) != sizeof ( UserInfo ) )
{
//判断文件是否被破坏。
ShowMessage ( "配置文件被破坏!" );
fclose ( ptr );
reutrn false;
}
fseek ( ptr, 0L, SEEK_SET );//定位到文件头
fread ( &UserInfo, sizeof(UserInfo),1,ptr);//读取内容到结构。
fclose ( ptr );
return true;
}
void __fastcall SaveConfig()
{
FILE * ptr;
AnsiString FileName=ExtractFileName(ParamStr(0))+"UserInfo.Dat";
ptr = fopen ( FileName.c_str(), "wb" );
if ( ptr == NULL )
{
ShowMessage ( "文件打开失败!" );
return false;
}
fwrite (&UserInfo,sizeof(UserInfo), 1, ptr );//读取内容到结构。
fclose (ptr);
}
这样就完成了一个配置文件的读写。下面在用Stream来处理这个文件。
bool __fastcall ReadConfig ()
{
//用流来读取,我用内存流是因为我的个人习惯,其实用文件流也是一样的。
TMemoryStream * readStream = new TMemoryStream ();
AnsiString FileName = ExtractFileName(ParamStr(0))+"UserInfo.Dat";
readStream->LoadFromFile ( FileName );
if(readStream->Size!=sizeof( UserInfo ) )
{
ShowMessage ( "配置文件被破坏!" );
delete readStream;
reutrn false;
}
readStream->Seek ( 0, soFromBeginning );//定位到文件头
readStream->ReadBuffer ( &UserInfo, sizeof ( UserInfo ));
//读取文件内容到结构
delete readStream;
}
void __fastcall SaveConfig ()
{
TMemoryStream * readStream = new TMemoryStream ();
AnsiString FileName=ExtractFileName(ParamStr(0))+"UserInfo.Dat";
readStream->WriteBuffer(&UserInfo, sizeof ( UserInfo ) );
//将结构写入流
readStream->Seek ( 0, soFromBeginning );//定位到头
readStream->SaveToFile ( FileName );
delete readStream;
}
这样完成了用流来读写数据,通过对这两种方法的比较,用流方便一些。用文件来保存数据的缺点就是有些繁琐,而且文件容易被删除,但它的优点就可以保存大量、复杂的数据,这时使用注册表和INI文件所无法完成的。
文章最初来自哪里我已经忘了好像是C++Builder研究,这篇文章的题目叫程序配置信息的保存
ww425
2004-08-13
打赏
举报
回复
万分感谢qiuafa!
qiuafa
2004-08-13
打赏
举报
回复
// 去掉
if (com->InheritsFrom(__classid(TPanel)))
{
m_rootcomponent->Assign(com);
}
dragonki
2004-08-13
打赏
举报
回复
用ini吧
qiuafa
2004-08-13
打赏
举报
回复
//.cpp
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TLabel *Label1;
TEdit *Edit1;
TPanel *Panel1;
TMemo *Memo1;
void __fastcall FormCreate(TObject *Sender);
void __fastcall FormDestroy(TObject *Sender);
private: // User declarations
AnsiString m_dfmfile;
TComponent* m_rootcomponent;
void __fastcall ReadFromFile(const AnsiString& filename);
void __fastcall WriteToFile(const AnsiString& filename);
void __fastcall ReadFromStream(TStream *stream);
void __fastcall WriteToStream(TStream *stream);
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
qiuafa
2004-08-13
打赏
举报
回复
// 参考例子
// .h
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
m_dfmfile = "D:\\temp\\form.dfm";
m_rootcomponent = this;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WriteToStream(TStream *stream)
{
if (stream==NULL)
return;
TWriter* Mywriter = NULL;
TMemoryStream* memstr = NULL;
try
{
memstr = new TMemoryStream();
Mywriter = new TWriter(memstr, 4096);
Mywriter->WriteRootComponent(m_rootcomponent);
if (Mywriter!=NULL) { delete Mywriter; Mywriter = NULL; }
if (memstr->Size>0)
{
memstr->Position = 0;
if (TestStreamFormat(memstr)==sofText)
{
stream->CopyFrom(memstr, memstr->Size);
}
else
{
ObjectBinaryToText(memstr, stream);
}
}
}
__finally
{
if (Mywriter!=NULL) { delete Mywriter; Mywriter = NULL; }
if (memstr!=NULL) { delete memstr; memstr = NULL; }
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ReadFromStream(TStream *stream)
{
if (stream==NULL)
return;
for (int i=m_rootcomponent->ComponentCount; i>0; i--)
{
delete m_rootcomponent->Components[i-1];
}
TReader* Myreader = NULL;
TMemoryStream* memstr = NULL;
try
{
memstr = new TMemoryStream();
stream->Position = 0;
if (stream->Size>0)
{
if (TestStreamFormat(stream)==sofText)
{
stream->Position = 0;
ObjectTextToBinary(stream, memstr);
}
else
{
stream->Position = 0;
memstr->LoadFromStream(stream);
}
memstr->Position = 0;
Myreader = new TReader(memstr, 4096);
TComponent *com = Myreader->ReadRootComponent(m_rootcomponent);
if (com->InheritsFrom(__classid(TPanel)))
{
m_rootcomponent->Assign(com);
}
}
}
__finally
{
if (Myreader!=NULL) { delete Myreader; Myreader = NULL; }
if (memstr!=NULL) { delete memstr; memstr = NULL; }
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WriteToFile(const AnsiString& filename)
{
TFileStream* filestr = NULL;
try
{
filestr = new TFileStream(filename, fmCreate | fmOpenWrite);
WriteToStream(filestr);
}
__finally
{
if (filestr!=NULL) { delete filestr; filestr = NULL; }
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ReadFromFile(const AnsiString& filename)
{
TFileStream* filestr = NULL;
try
{
filestr = new TFileStream(filename, fmOpenRead);
filestr->Position = 0;
if (filestr->Size>0)
{
ReadFromStream(filestr);
}
}
__finally
{
if (filestr!=NULL) { delete filestr; filestr = NULL; }
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ReadFromFile(m_dfmfile);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
WriteToFile(m_dfmfile);
}
//---------------------------------------------------------------------------
qiuafa
2004-08-13
打赏
举报
回复
u.p.
cccp2004
2004-08-13
打赏
举报
回复
最好用Memo从文件读取,并保存
Memo1->Lines->LoadFromFile("c:\\123.txt");打开
Memo1->Lines->SaveToFile("c:\\123.txt");保存
也可以用对话框,不过上述方式简单一点
constantine
2004-08-13
打赏
举报
回复
动态生一个memo,loadFromfile,Edit->Text=memo->Text;
同样返回去超作就可以保存了
如何将cmd中命令输出
保存
为TXT
文本
文件
在使用Windows XP中的cmd.exe工具时,有时候我们想要把我们的输入命令及结果
保存
起来,但是用复制的方法过于麻烦;有时输出数据条数过大,会造成内容自动滚出屏幕,无法阅读,我们可将命令运行的结果输出到
文本
文件。如何将cmd中命令输出为TXT
文本
文件呢? 老实孩子教给大家一个方法: 在你输入命令后再加上“>”和你想
保存
的文件地址和名字就行了。 例如:将Ping命令的加长包输出到D盘的p
python 将print输出
保存
到
文本
文件中
python 将print输出
保存
到
文本
文件中 虽然有时候感觉学代码好烦人啊,一直出错,一直百度,答案五花八门的,不过好在最后总能解决,然后就是很开心很有成就感的(〃‘▽’〃) 今天就是想要把最后print出来的结果
保存
成一个txt文件 f = open("out.txt", "w") # 打开文件以便写入 print("Correlation is ", np.mean(rho),file...
C语言程序将结果输出
保存
为
文本
(如txt)文件的便捷方法
执行c语言程序将结果输出到txt的方法: 1、运行cmd 2、执行程序路径.exe>输出路径.txt
将cmd中的命令输出
保存
为txt
文本
文件
在使用Windows XP中的cmd.exe工具时,有时候我们想要把我们的输入命令及结果
保存
起来,我们可将命令运行的结果输出到
文本
文件。 在你输入的命令后再加上>和你想
保存
的文件地址和名字就可以了。 例如:将Ping命令的运行结果输出到D盘的ping.txt
文本
文件。 在提示符下输入ping www.baidu.com >d:\a.txt 这时候发现D盘下面的ping.txt里
【办公效率】如何将cmd中命令输出
保存
为TXT
文本
文件
转载来自:http://blog.sina.com.cn/zhanghongyas 在使用Windows XP中的cmd.exe工具时,有时候我们想要把我们的输入命令及结果
保存
起来,但是用复制的方法过于麻烦;有时输出数据条数过大,会造成内容自动滚出屏幕,无法阅读,我们可将命令运行的结果输出到
文本
文件。如何将cmd中命令输出为TXT
文本
文件呢?老实孩子教给大家一个方法:在你输入命令后再加上“>...
C++ Builder
13,870
社区成员
102,693
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章