分享
 
 
 

C BUILDER中相关流对象的讨论

王朝other·作者佚名  2008-06-01
窄屏简体版  字體: |||超大  

第一章 概述

在CBUILDER中,存在以下几种流对象:

TFileStream

TMemoryStream

TStringStream

TWinSocketStream

TBlobStream

TOleStream

TClientBlobStream

TResourceStream

下面是以上各类的继续关系

TObject

TStream

+---------------------------+---------------------------+--------------------+-------------------+------------+

THandleStream TCustomMemoryStream TWinsocketStream TBlobStream TOleStream TStringStream

TFileStream TMemoryStream

+-------------------------------------------+

TClientBlobStream TResourceStream

第二章 流对象的属性及方法简介

关于各属性和方法的具体语法请见CBUILDER的帮助

一. TStream介绍

属性

Position:当前位置指针

Size:流的大小,单位为字节

方法

CopyFrom:从一个流往另一个流拷贝数据

Read:从流中读取一定字节的数据到缓冲区,返回读取的字节数

ReadBuffer:从流中读取一定字节的数据到缓冲区,如不正确则异常

ReadComponent:从流中取出一个组件

ReadComponentRes:以Windows的资源文件格式从流中读取一组件

Seek:定位流的当前位置指针

SetSize:设置流的大小。

Write:从缓冲区中将一定字节的数据写入到流中,返回写入的字节数

WriteBuffer:从缓冲区中将一定字节的数据写入到流中,失败则异常

WriteComponent:将一组件写入到流中

WriteComponentRes:将一组件以Windows资源文件的格式写入到流中

注重:不能直接建立一个TStream类型的流对象

二. THandleStream介绍

属性

Handle:流对象要读写的通迅资源的句柄

Size:句柄所标识的资源的大小,单位为字节

方法

Read:从流中读数据到缓冲区中

Seek:设置流的当前位置

SetSize:设置流的大小,不成功则返回一个异常

THandleStream:通过一个打开的句柄建立一个句柄流对象

Write:将数据从缓冲区中写入到流

可以使用THandleStream流对象来存取如文件、套接字、命名管道、邮槽等打开了句柄的通迅资源。下面是一个使用句柄流对象进行文件操作的片段代码:

//////////////////////////////////////////////////////////////////////////////////////////////

////将c:\config.sys文件中的内容读入到一个文本框中

int fileHandle;

THandleStream *fileStream;

fileHandle = FileOpen(“c:\\config.sys”,fmOpenRead);

if(fileHandle == -1) return ; //打开文件出错

fileStream = new THandleStream(fileHandle);

char buffer[10001];

unsigned long bufferSize;

do

{

bufferSize = fileStream->Read(buffer, 10000);

if (bufferSize > 0 )

{

buffer[bufferSize] = 0;

Memo1->Text += buffer;

}

}while( bufferSize == 10000 );

delete fileStream;

FileClose(fileHandle); //请注重一定要先注销流对象才能关闭句柄

三. TCustomMemoryStream介绍

属性

Memory:指向内存流对象的实际内存的指针,可用该指针直接访问内存流的内存

方法

Read:从流中读数据到缓冲区中

SaveToFile:将内存流中的数据保存到文件中

SaveToStream:将内存流中的数据保存到其它流对象中

Seek:设置流对象的当前位置

SetPointer:设置与内存流对象相关联的内存池

注重:该类为纯虚类,不能直接建立其对象。应使用TMemoryStream或是TResourceStream。

四. TWinSocketStream介绍

属性

TimeOut:设置在读或写Socket时的超时值,单位:毫秒

方法

Read:从Socket中读取指定字节的数据到缓冲区中,返回实际读取的字节数

Seek:没有意义

TWinSocketStream:根据指定的Socket句柄和超时时间建立一个Socket流对象

WaitForData:确认是否可以通过Socket连接来发送或接收数据了。

Write:通过Socket连接发送缓冲区中指定字节的数据

TWinSocketStream流对象用来在阻塞方式的Socket连接中发送和接收数据,从而避免一般情况下的挂起现象。下面是一个用TWinSocketStream进行收发数据的代码片段:

/////////////////////////////////////////////////////////////////////////////////////////////////////

//在一单独的线程中通过阻塞式Socket连接发送数据

void __fastcall TMyClientThread::Execute()

{

TWinSocketStream *pStream = new TWinSocketStream(ClientSocket1->Socket, 60000);

try

{

while (!Terminated && ClientSocket1->Active)

{

try

{

char buffer[10];

GetNextRequest(buffer); // GetNext

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有