CNET中国旗舰网站

ZDNet China | CNET科技资讯网 | 政府采购 | 行业网站联盟





 
标题: Delphi中用于读写的文件类型精华篇
otmtt
灵玉会员
Rank: 8Rank: 8



UID 253625
精华 0
积分 6074
帖子 413
威望 2888
ZD币 692 元
阅读权限 180
注册 2007-10-8
状态 离线
  楼主
发表于 2007-11-26 08:43  资料  个人空间  短消息  加为好友 

Delphi中用于读写的文件类型精华篇

一.旧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            bResu = 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来完成.




顶部
热点频道推荐: C/S开发| 数据库| WEB开发| 嵌入式| 项目管理|
 



当前时区 GMT+8, 现在时间是 2009-1-8 08:50

  Powered by Discuz! 5.5.0 © 2001-2007 Comsenz Inc.
Processed in 0.063636 second(s), 3/3 queries

清除 Cookies - 联系我们 - ZDNetChina中文社区 - 无图版