初用流遇到的问题(补全)(49分)

  • 主题发起人 主题发起人 denny
  • 开始时间 开始时间
D

denny

Unregistered / Unconfirmed
GUEST, unregistred user!
var
k:string;
st:tfilestream;
l:integer;
begin
if opendialog1.execute then
begin
st:=tfilestream.Create(opendialog1.filename,fmopenread);
l:=st.size;
while st.position<st.sizedo
st.read(k,l);
应该是这里有问题吧
如果把k改为char类型,用
st.read(k,sizeof(char))来一个个读出来就没问题
但是不是就不能一次读进一个字符窜里的,应该可以
的啊
edit1.txt:=k;
end;
end;

 
流要重新定
sT.Seek(0,soFrombegin
ning);//将流数据指针移到开
 
while st.position<st.sizedo
st.read(k,l);
是不是有点矛盾那?既然一次就读了l(即st.size)
那一次不就读完了吗?还用的着while吗?
建议:
st := tfilestream.Create(opendialog1.filename, fmopenread);
st.position := 0;//加上这行
l:=st.size;
st.read(k,l);//去掉while
edit1.txt:=k;
你再去试一试看看.
 
其实用while语句是为了更好说明我把k的类型改为char后,一个个字符读就ok,但是我实际上当k是string 类型时是没用whlie的,(其实用while也没问题吧,一次
读好就一次拉,只要传好就ok拉),但还是传不到。总是出现什么
project project1.exe raised exception class eaccessviolation with message 'access violation at address 00403a12 in module 'project1.exe' read of address ffffffff'.我关了再开也是哦
另外加了向兄的语句都不可以哦,一样的错。
 
还有,我跟踪过k的值是很多个#7,但我的文件内容只有dd哦
 
是变量的问题,k是string变量,则只为其分配一个地址,无法容纳read方法
数据。建议使用PChar,或者array of char,在程序中动态分配内存。
 
DDMCLL的
试下
var
k:TstringS;
st1:tfilestream;
begin
if opendialog1.execute then
begin
K:=TStringList.Create();
st1:=tfilestream.Create(opendialog1.FileName,fmopenread);
K.LoadFromStream(ST1);
EDIT1.TEXT:=copy(K.Text,1,3);
//控制位置;
K.Free;
ST1.Free ;
end;
end;
 
多人接受答案了。
 
后退
顶部