在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在Delphi中,所有流对象的基类为TStream类, 其中定义了所有流的共同属性和方法。
TStream类中定义的属性介绍如下: 1、Size: 此属性以字节返回流中数据大小。 2、Position: 此属性控制流中存取指针的位置。 Tstream中定义的虚方法有四个: 1、Read:此方法实现将数据从流中读出。函数原形为: Function Read(var Buffer;Count:Longint):Longint;virtual;abstract; 参数Buffer为数据读出时放置的缓冲区,Count为需要读出的数据的字节数,该方法返回值为实际读出的字节数,它可以小于或等于Count中指定的值。 2、Write:此方法实现将数据写入流中。函数原形为: Function Write(var Buffer;Count:Longint):Longint;virtual;abstract; 参数Buffer为将要写入流中的数据的缓冲区,Count为数据的长度字节数,该方法返回值为实际写入流中的字节数。 3、Seek:此方法实现流中读取指针的移动。函数原形为: Function Seek(Offset:Longint;Origint:Word):Longint;virtual;abstract; 参数Offset为偏移字节数,参数Origint指出Offset的实际意义,其可能的取值如下: soFromBeginning:Offset为移动后指针距离数据开始的位置。此时Offset必须大于或者等于零。 soFromCurrent:Offset为移动后指针与当前指针的相对位置。 soFromEnd:Offset为移动后指针距离数据结束的位置。此时Offset必须小于或者等于零。 该方法返回值为移动后指针的位置。 4、Setsize:此方法实现改变数据的大小。函数原形为: Function Setsize(NewSize:Longint);virtual; 另外,TStream类中还定义了几个静态方法: 1、ReadBuffer:此方法的作用是从流中当前位置读取数据。函数原形为: Procedure ReadBuffer(var Buffer;Count:Longint); 参数的定义跟上面的Read相同。注意:当读取的数据字节数与需要读取的字节数不相同时,将产生EReadError异常。 2、WriteBuffer:此方法的作用是在当前位置向流写入数据。函数原形为: Procedure WriteBuffer(var Buffer;Count:Longint); 参数的定义跟上面的Write相同。注意:当写入的数据字节数与需要写入的字节数不相同时,将产生EWriteError异常。 3、CopyFrom:此方法的作用是从其它流中拷贝数据流。函数原形为: Function CopyFrom(Source:TStream;Count:Longint):Longint; 参数Source为提供数据的流,Count为拷贝的数据字节数。当Count大于0时,CopyFrom从Source参数的当前位置拷贝Count个字节的数据;当Count等于0时,CopyFrom设置Source参数的Position属性为0,然后拷贝Source的所有数据; TStream还有其它派生类,其中最常用的是TFileStream类。使用TFileStream类来存取文件,首先要建立一个实例。声明如下: constructor Create(const Filename:string;Mode:Word); Filename为文件名(包括路径),参数Mode为打开文件的方式,它包括文件的打开模式和共享模式,其可能的取值和意义如下: 打开模式: fmCreate :用指定的文件名建立文件,如果文件已经存在则打开它。 fmOpenRead :以只读方式打开指定文件 fmOpenWrite :以只写方式打开指定文件 fmOpenReadWrite:以写写方式打开指定文件 共享模式: fmShareCompat :共享模式与FCBs兼容 fmShareExclusive:不允许别的程序以任何方式打开该文件 fmShareDenyWrite:不允许别的程序以写方式打开该文件 fmShareDenyRead :不允许别的程序以读方式打开该文件 fmShareDenyNone :别的程序可以以任何方式打开该文件 TStream还有一个派生类TMemoryStream,实际应用中用的次数也非常频繁。它叫内存流,就是说在内存中建立一个流对象。它的基本方法和函数跟上面是一样的。 写流: 如果把文本框中的字符串写入流中,最好使用字符指针Pchar.例如: var pstr:Pchar; mestr:string; FS:TFilestream; begin FS:=TFileStream.Create((Extractfilepath(Application.ExeName)+'123.txt'),fmCreate ); mestr:=edit1.text; pstr:=Pchar(mestr);//把字符串转成字符指针 FS.Writebuffer(pstr^,Length(pstr));//把字符串写入流中 读流 流的读取比写入要困难一些,下面谈读流的几个注意点: 1.如果是字符串的读取,最好也使用字符指针Pchar 2.要给字符指针申请内存用GetMem 3.要把字针转成字符型,直接付值就行 4.要限定字符串长度,用SetLength,这条是很关键的 5.要释放内存用FreeMem var pstr:Pchar; mestr:string; FS:TFilestream; meint:integer; begin FS:=TFileStream.Create((Extractfilepath(Application.ExeName)+'123.txt'),fmOpenRead ); getmem(pstr,meint);//申请字符指针内存 fs.Readbuffer(pstr^,meint);//在流里读出meint大小的字符串到字符指针 mestr:=pstr;//字符指针转成字符 SetLength(mestr,meint);//限定字符大小 freemem(Pstr);//释放内存 FS.Free;//释放流 end; |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论