delphi中流stream的操作.(个人笔记)

2005年10月25日,今天在做一个自己用的小程序. 需要用到流把一些字符符和文件连接起来.使用过程中出现了不少问题. 这些问题需小,但也浪费了我不少时间去解决.现在把问题记录下来以方便我将来查阅:

流的操作不外乎"读"Write, "写"Read,定位Seek:

把信息读入流里是使用.TStream.Write(var buf ;count:integer)方法.

而把信息从流里读给变量则用TStream.Read(var buf;count:integer)方法.

这两个方法在我刚学使用流整天搞乱,需然现在已尼很清楚了但还是写下来.

如果一个流想把另一个流读入自己,应该写成这样.

s1.Write(s2.Memory^,s2.size); //写成s1.Write(s2,s2.size);是错误的.

如果想让流读入一个字符串应该这样写:

var

s:string;

s1:TMemoryStream;

begin

s:='你要的字符串';

s1.Write(s[1],length(s)-1);//s1.write(s,length(s));是错误的,因为在delphi里,字符的第一位s[0]用来保存了字符的长度.这样写读入的信息也是错误的.这是我的理解,不过为什么length(s)要减一,我不是搞不懂.

........

流的信息读完了,是时候作其它处理了,我现在要把他保存在一个数组里.应该这样做:

var

b:ansistring;

begin

    setLength(b,s.size);
    s.Seek(0,soFromBeginning);
    s.Read(b[1],s.Size);//这里也要注意写成了s.Read(b,s.size)也是错的.

你可能感兴趣的:(delphi)