网站建设| 数据库类| 图形图象| 程序设计| 现代办公| 操作系统| 考试认证| 网络技术| 软件工程| 电脑相关| 文学作品
网站开发| 网页制作| 操作系统| 图象图形| 考试认证| 数据库类| 程序设计| 硬件技术| 现代办公| 网络技术| 笑话频道
 
您的位置: 电脑书库首页-> 电脑文摘-> 程序设计-> Delphi/Pascal-> Delphi中用于读写(I/O)的三种文件类型

Delphi中用于读写(I/O)的三种文件类型
作者:佚名 来源:InterNet 加入时间:2004-11-26
相关文章 相关书籍:

Delphi中用于读写(I/O)的三种文件类型

一.旧pascal文件类型
    用旧文件变量表示的文件类型,比如 F:text,F:File. 定义了三类:有类型,无类型,字符类型以及一些Delphi的文件操作函数.比如:AssignPrn,Writeln,这些文件类和Windows文件句柄不兼容

二.Windows文件句柄(handle)
    面向对象的Pascal的文件句柄封装了Windows文件句柄类型,文件操作函数库则封装了Windows API函数,比如"Fileread"就是调用了Windows API 函数"ReadFile",Delphi提供了一个Windows API操作接口如果熟悉Windows API,可以用Windows文件句进行文件操作.

三.文件流(File Streams)
    文件流是TFileStream类的对象实例,文件流是高层的文件操作类型,TFileStream提供了一个句柄属性.用此属性可操作Windows文件句柄类型.

如何选择文件类型

      Windows文件句柄是较底层的文件操作类型,提供了灵活的同步及异步文件读写控制,以下提供用Windows文件句柄类型对文件同步及异步操作的伪代码描述:
同步操作:
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead, NULL) ;
// check for eof
if (bResult &&  nBytesRead == 0, ) {
 // we're at the end of the file
 }

异步操作:
// set up overlapped structure fields 
gOverLapped.Offset     = 0;
gOverLapped.OffsetHigh = 0;
gOverLapped.hEvent     = NULL;
 
// attempt an asynchronous read operation
bResult = ReadFile(hFile, &inBuffer, nBytesToRead, &nBytesRead,
    &gOverlapped) ;
 
// if there was a problem, or the async. operation's still pending ...
if (!bResult)
{
    // deal with the error code
    switch (dwError = GetLastError())

    {
        case ERROR_HANDLE_EOF:
        {
            // we're reached the end of the file
            // during the call to ReadFile
 
            // code to handle that
        }
 
        case ERROR_IO_PENDING:
        {
            // asynchronous i/o is still in progress
 
            // do something else for a while
            GoDoSomethingElse() ;
 
            // check on the results of the asynchronous read
            bResult = GetOverlappedResult(hFile, &gOverlapped,

                &nBytesRead, FALSE) ;
 
            // if there was a problem ...
            if (!bResult)
            {
                // deal with the error code
                switch (dwError = GetLastError())
                {
                    case ERROR_HANDLE_EOF:
                    {
                        // we're reached the end of the file
                        file  during asynchronous operation
                    }
 
                    // deal with other error cases

                }
            }
        } // end case
 
        // deal with other error cases
 
    } // end switch
} // end if
 
虽然Windows文件句柄提供灵活的文件控制,但须编写更多的出错处理代码,如果对
WindowsAPI不熟悉,使用Delphi推荐的旧文件变量类型.

       Delphi的旧文件类型使用AssignFile,使文件变量和物理文件关联,通过Delphi定义的
对文件变量的各种操作,完成文件的存取和操作.使用方便.以下提供对文件变量类
型的操作代码描述:
var

  F: TextFile;
  S: string;
begin
  if OpenDialog1.Execute then          { Display Open dialog box }
  begin
    AssignFile(F, OpenDialog1.FileName);   { File selected in dialog box }
    Reset(F);
    Readln(F, S);                          { Read the first line out of the file }
    Edit1.Text := S;                       { Put string in a TEdit control }
    CloseFile(F);
  end;
end;

      文件流是流(stream classes)的子类,所以使用他的一个优点就是能自动继承其父类的属性他能很容易的和其他的流类互操作,比如你如果想把一块动态内存块写入磁盘,可以使用一个TFileStream和一个TMemoryStream来完成.



[文章录入员:fightter]

相关文章 相关书籍:
本站推荐内容

近期主机类热搜关键词:
美国服务器 美国服务器租用 海外服务器租用 国外服务器租用

Delphi/Pascal
C/C++/VC
C++Builder
Basic/VB类
Delphi/Pascal
Java编程
FORTRAN
其它
电脑教程阅读排行
·DELPHI下的多线程程序设计(...
·Delphi与Excel的亲密接...
·Delphi实现串口通信的常用的...
·Delphi中初始化.Ini文件...
·Delphi中用于读写(I/O)...
·谈谈Delphi中的类和对象
·Delphi编译错误中文手册
·Delphi中关于TApplic...
·OPENGL图形程序设计
·SQL的基本操作