详解Delphi中用于读写的文件类型2012-02-02 梅友松 一.旧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