CBUILDER中相关流工具的接头
当前位置:以往代写 > C/C++ 教程 >CBUILDER中相关流工具的接头
2019-06-13

CBUILDER中相关流工具的接头

CBUILDER中相关流工具的接头

副标题#e#

第一章 概述

在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范例的流工具


#p#副标题#e#

二. 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); // GetNextRequest must be a thread-safe method
// write the request to the server
     pStream->Write(buffer, strlen(buffer) + 1);
           // continue the communication (eg read a response from the server)
     ...
}
catch (Exception &E)
{
     if (!E.ClassNameIs("EAbort"))
     //you must write HandleThreadException
           Synchronize(HandleThreadException());
        }
}
}
__finally
    {
       delete pStream;
    }
}

#p#副标题#e#

五. TBlobStream先容

要领

Read:读取数据到缓冲区中

Seek:定位流的当前位置

TBlobStream:按照一个TBlobField字段成立一个流工具

Truncate:从当前位置截短流工具

Write:将缓冲区中的数据写入到流工具中

TBlobStream流工具只用于对TblobField举办操纵,留意,当改变了数据集工具的当前记录时,要从头成立TBlobStream工具并在利用完后将之删除。

#p#分页标题#e#

//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//读取Blob字段的数据
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int MemSize;
char *Buffer;
TBlobStream *Stream;
if (!Query1->Eof)
Query1->Next();
Stream = new TBlobStream((TBlobField *)Query1->FieldByName("Notes"), bmRead);
    try
    {
       MemSize = Stream->Size + 1; // add one for null terminator
       Buffer = new char[MemSize]; // Allocate the memory.
       try
       {
        Stream->Read(Buffer, MemSize); //Read Notes field into buffer.
        Memo1->SetTextBuf(Buffer); // Display the buffer's contents.
       }
       catch (...)
       {
         delete Buffer;
        throw;
       }
delete Buffer;
}
    catch (...)
    {
       delete Stream;
       throw;
    }
    delete Stream;
}

六. TOleStream先容

要领

TOLEStream:通过一个流界面成立Ole流工具

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

Seek:定位流的当前位置

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

七. TStringStream先容

属性

DataString:流工具的实际存储字符串

Size:流工具巨细

要领

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

ReadString:以字符串形式返回流中指定命据

Seek:定位流的当前位置

TStringStream:按照一个字符串成立字符串流工具

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

WriteString:将字符串中数据写入到流中

八. TFileStream先容

要领

TFileStream:按照文件名成立或打开一个文件,并成立相应的文件流工具

例:TFileStream *fsBootINI = new TFileStream(“c:\\boot.ini”,fmOpenRead);

#p#副标题#e#

九. TMemoryStream先容

要领

Clear:排除流工具中所有数据

LoadFromFile:从文件中读入数据到流工具中

LoadFromStream:从其它流中读入数据

SetSize:配置流工具的巨细

Write:从缓冲区中写数据到内存流中

十. TClientBlobStream先容

要领

TClientBlobStream:按照TblobField工具成立一个流工具

Truncate:截短流

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

该流工具用来操纵TClientDataSet数据会合的BLOB范例的字段

十一. TResourceStream先容

要领

TResourceStream:按照EXE文件名柄或DLL文件句柄和资源描写生成流工具

Write:不支持写操纵,发生异常

十二. 与流工具相关的工具先容

TFilter

+————————–+

|         |

TReader    TWriter

以上工具用于将组件写入到流工具中或是从流工具生成组件

流工具中的要领ReadComponent 和WriteComponent在实现时就是利用TReader和TWriter来实际操纵的。

十三. 与流工具相关的函数

extern PACKAGE void __fastcall ObjectTextToBinary(TStream* Input, TStream* Output);
extern PACKAGE void __fastcall ObjectBinaryToText(TStream* Input, TStream* Output);
extern PACKAGE void __fastcall ObjectTextToResource(TStream* Input, TStream* Output);
extern PACKAGE void __fastcall ObjectResourceToText(TStream* Input, TStream* Output);

以上函数都是针对存储工具的流而言的,在流之间转换流中所存储工具的描写方法。

第三章 流工具的应用规模

一. 利用统一的流的观念来操纵各类差异范例的资源。

二. 通过流将资源生存到差异的介质上,如将组件生存到文件中,将ICON资源调入内存等。

三. 简化一些工具的操纵,如TBlobStream和TClientBlobStream

四. 实现一些本来欠好实现的成果,如TWinSocketStream实现超时操纵

    关键字:

在线提交作业