| 文件的打开与关闭 AssignFile :把一个外部文件名和一个文件变量相关联 Reset :打开一个存在的文件 Rewrite :创建并打开一个新文件(或覆盖原有文件) Append :以添加方式打开一个文件(只适用于文本文件) CloseFile : 关闭一个打开的文件 FileOpen :打开一个特定的文件并返回文件句柄 FileCreate :创建一个给定文件名的文件并返回文件句柄 FileClose :关闭一个特定句柄的文件 后边三个文件主要供系统内部使用,在文件复制的编程中也往往会用到。它们操作的对象是文件句柄而不是文件变量。 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来完成.
备注: 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推荐的旧文件变量类型.
|