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

原创 2000年12月12日 14:03:00

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来完成.

【转】delphi读写txt文件

http://meidi152.blog.163.com/blog/static/5423302009610103610744/ 1. memo控件读取txtmemo1.Lines.LoadFromF...
  • okmnji79513
  • okmnji79513
  • 2010年01月11日 12:07
  • 4094

Delphi中读写TXT文件

  • 2017年07月26日 16:51
  • 1KB
  • 下载

delphi文件操作

如何在delphi中操作文件的读与写?  我刚开始接触delphi,如何在delphi中操作文件的读与写,哪位朋友指教一下非常感谢!最好来段源码.  var f:text;...  AssignFil...
  • xwchen
  • xwchen
  • 2007年07月26日 22:03
  • 4919

Delphi7文件操作常用函数一

1. AssignFile、Erase AssignFile procedure AssignFile(var F; FileName: string);:给文件变量连接一个外部文件名。这里需要注...
  • kimifdw
  • kimifdw
  • 2013年02月21日 11:32
  • 7231

Delphi 的异步方法

先看代码: uses System.Threading; TTask.Run( procedure begin DmGKWEB.StartDownload; //这个方...
  • pcplayer
  • pcplayer
  • 2017年04月08日 14:15
  • 1257

Delphi中实现文件拷贝的三种方法 (收藏)

1.利用Windows API:CopyFile(lpExistingFileName, lpNewFileName: PChar; bFailIfExists: BOOL): BOOL proced...
  • chinmusam
  • chinmusam
  • 2010年12月19日 02:58
  • 1082

异步读写文件

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include #i...
  • redeyerabbit
  • redeyerabbit
  • 2012年09月28日 16:54
  • 2471

Delphi 创建目录及写日志文件

 procedure TfrmStartSendMsg.WriteLog(txt:String);var  TF: TextFile;  LogFile: string;  sysDir:string...
  • saindy5828
  • saindy5828
  • 2009年04月20日 16:08
  • 2041

Delphi文本文件的写操作

最近我用Delphi写了个程序,需要将用户信息写入文件,因此在网上查了下 Delphi有关文本文件的操作,经整理后,我将其封装成了一个函数, 以方便以后的使用,访函数代码如下: ...
  • friendan
  • friendan
  • 2012年10月12日 20:42
  • 1568

delphi读取和写入文件-richedit控件

需要两个按钮和两个Richedit控件,采用默认名称即可. procedure TForm1.Button1Click(Sender: TObject);  //写文件 var wText...
  • hushiwei1993
  • hushiwei1993
  • 2015年12月03日 16:48
  • 1288
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi中用于读写(I/O)的三种文件类型
举报原因:
原因补充:

(最多只允许输入30个字)