分享
 
 
 

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

王朝delphi·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有