• 2009-06-03

    【转】TFileStream类 - [C++Builder天堂]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://yingzi-ing.blogbus.com/logs/40430067.html

    TFileStream类使得应用程序可以从磁盘的文件中读取数据。
    类关系 TObject->TStream->THandleStream
       使用TFileStream类可以访问磁盘文件的信息。该类将打开一个全程的文件,并提供方法来读取该文件。如果应用程序中已经定义了该文件的句柄,可以使用THandleStream对象以同样的模式打开该文件。

    方法列表
    ~TFilStream 删除TFileStream类的实例
    TFileStream 创建TFileStream类的实例

    方法
    TFileStream::~TFileStream
       删除一个TFileStream类的实例。
    TFileStream::~TFileStream(void);
       在应用程序中一般不直接调用~TFileStream方法,而是调用delete方法。~TFileStream 方法将在释放对象前关闭文件流的句柄。

    TFileStream::TFileStream
       创建一个TFileStream类的实例。
    __fastcall TFileStream(const System::AnsiString FileName,Word Mode);
       不要直接利用TFileStream来实例化读取或屿写入文件中的文件流。用new进行,把文件名和文件打开的方式作为参数传递:
       参数Mode指明文件打开的方式。Mode由打开模式与共享模式组成。打开模式取值见下表:
    模式 含义
    fmCreate 创建一个指定文件名的文件,如果指定文件名的文件已经存在,则以写模式打开
    fmOpenRead 以只读方式打开文件
    fmOpenWrite 以写模式打开文件,写到文件的内容将替换文件以前的内容
    fmOpenReadWrite 打开文件来修正文件的内容,而不是替换它们

    共享模式如下表:
    模式 含义
    fmShareCompat 共享与经FCBs方式打开的兼容
    fmShareExclusive 其他的应用程序不能打开该文件
    fmShareDenyWrite 其他的应用程序只能以只读方式打开文件
    fmShareDenyRead 其他的应用程序只能以写方式 打开文件
    fmShareDenyNone 其他的应用程序可以以任何方式打开文件
    如果文件不能被打开,将引发一个异常。

    //-------------------------------------------------------------------------

    THandleStream

       THandleStream表示一个流对象,该对象可以便应用程序读取一个Windows句柄标志的资源。
    类关系
       使用THandleStream对象可以访问文件、接口、磁盘、邮件或其他可以提供Windows句柄的信息资源。例如,FileOpen函数可以提供磁盘上一个文件的Windows句柄。THandleStream对象在使用Windows 句柄进行I/O操作时要求应用程序使用统一的流接口。为了避免管理文件句柄时的额外消耗,可以使用TFileStream对象处理磁盘文件。

    属性列表
    Handle 流从中读取的信息资源的句柄
    Size Handle属性指定资源的字节长度

    方法列表
    ~THandleStream 取消THandleStream实例并释放内存
    Read 读取Count字节的内容到缓冲区中
    Seek 重设句柄流的当前位置
    SetSize 设置文件结尾标志
    THandleStream 创建一个THandleStream类的实例
    Write 将Count个字节的数据写到当前位置

    属性
    THandleStream::Handle
       指定流从中读取的信息资源的句柄。
    __property int Handle={read = FHandle,nodefault};
       从Handle属性中可以获得调用WindowsAPI时需要的句柄,或文件管理函数的句柄。为了读取资源可以使用THandleStream对象中定义的方法。
       Handle属性是一个只读属性。不能通过改变句柄属性使得句柄流在读取操作中交换,反之亦然。例如,如果想将一个以只读方式打开的文件句柄改变成写模式必须使用下面给出的操作:
    (1)释放流对象。
    (2)调用FileClose函数关闭文件。
    (3)以写模式重新打开文件,并使用句柄创建一个新的句柄对象的实例。然后,为文件打开一个TFileStream对象,并为流指定写模式。
       只能在THandleStream对象被取消后才能对Handle属性调用FileClose函数。

    THandleStream::Size
       指定Handle属性指定资源的字节长度。
    __property int Size = {rea = GetSize,write = SetSize,nodefault};
       属性Size中决定了资源的字节长度。设置属性Size可以截短资源中的信息。并不是所有的信息资源都可以使用支持属性Size的THandleStream对象来访问。例如,并不能对磁带使用属性Size。

    方法
    THandleStream::~THandleStream
       ~THandleStream释放与THandleStream对象有关的内存。
      __fastcall virtual ~THandleStream(void) { }
       不要直接调用~THandleStream。用 drlete 进行,它会自动调用~THandleStream 。

    THandleStream::Read
       从与句柄流相应的资源中读取count字节的内容到缓冲区中。
      virtual int __fastcall Read(void * Buffer ,int Count ) ;
       使用Read方法可以在文件的大小未知时从与指定句柄流相应的资源中读取数据。Read方法将复制资源中Count字节的内容。复制内容从文件的当前位置开始,方法结束后文件的当前位置加上实际复制的字节数。Read 方法 返回实际复制的字节大小,如果文件不是足够大则有可能该数值小于Count。所有其他的句柄流的数据读取方法(例如RendBuffer, readComponent )都将调用Read方法来进行实际的读取操作。

    THandleStream::Seek
       重设句柄流的当前位置。
      virtual int __fasteall Seek(int Offset, Word Origin );
       使用Seek 方法可以通过指定偏移量在与句柄流关联的资源中移动当前位置。Seek 方法容许应用程序在资源中的特定位置读取数据。
       参数Origin指定如何解释Offset参数,它可以取为下表中的任何一个数值。
    值 含义
    soFromBeginning 从资源开始处计算偏移量,当前位置将移到Offset处,Offset必须大于等于0
    soFromCurrent 从当前位置计算偏移量,当前位置需要加上Offset
    sofromEnd 从资源尾处计算偏移量,ffset必须小表等于0,表示距末尾处Offset字节的位置
       Seek方法将返回Position属性的新值,即资源流现在有位置。

    THandleStream::SetSize
       设置文件结尾标志,以便在指定位置截短资源。
      virtual void __fastcall SetSize(int NewSize );
       调用SetSize 方法可以设置资源的大小。Size 方法重载了继承的方法,即容许资源的大小由句柄的改变来标志。方法SetSize将调用Seek 方法跳到指定位置,然后写入一个文件尾标志。如果资源大小不能被改变将引发一个异常。例如,为一个设置为FrnOpenRead模式的文件句柄调用SetSize方法时将会引发一个异常。

    THandleStream::THaandleStream
       创建一个THandleStream类的实例。
      __fastcall THandleSTream(int Handle);
       调用Create方法可以为给定的句柄示例一个THandleStream类的实例。句柄必须在以相应的模式打开资源时获得。例如,如果想从文件中读取信息而创建一个句柄流,可以在模式fmOpenRead或fmOpenReadWrite下打开文件时获得。如果想向文件中写入信息而创建一个句柄流,可以在模式fmOpenWrite或fmOpenReadWrite下打开文件时获得。

    THandleStream::Write
       将缓冲区中Count个字节的数据库写到资源的当前位置。
      virtual int__fastcall Write(const void* Buffer,,int Count);
       使用Write方法可以将Count个字节的数据从当前位置开始,写入到与句柄流相关联的资源中。在把数据写入到资源后,Write方法将把当前位置加上写入的实际字节大小,并返回实际写入的字节大小。
       所有其他的句柄流的写入数据方法(例如WruteBuffer,WriteComponent)都将调用Write方法来进行实际的写操作。


    收藏到:Del.icio.us