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)也是错的.