SOS:紧急求助!!!(0分)

  • 主题发起人 主题发起人 babyrun
  • 开始时间 开始时间
B

babyrun

Unregistered / Unconfirmed
GUEST, unregistred user!
用什么方法来读取过万字符量的字符串???
 
就普通的string就可以啊。
 
从什么地方读?文件还是数据库
读完干什么?打印还是。。。
 
var
sFileList : TstringList;
sTmp : string;
begin
sFileList :=TstringList.create();
sFileList.LoadFromFile(sFileName);
sTmp:=sFileList.String[1];
//运行到这儿显示溢出
end;

注:sFileName为文件名,该文件只有一行,并且超过6万个字节。
 
万字也不过10K嘛,该怎么做就怎么做啦
不过有的时候还是直接用动态分配和指针更好
像你这样提问题可不好,总该把问题说清楚吧
 
只有一行? 那是這句寫錯了: sTmp:=sFileList.String[1];
//运行到这儿显示溢出
應該是sTmp:=sFileList.String[0] 才對.
 
应该是sTmp:=sFileList.String[0];
//运行到这儿显示溢出
 
TStringList的LoadFromFile是以Crln来换行的
比如'abc'#13#10'def'就会被LosdFromFile认为是两行数据
你这样用TStringList有奇怪,我从来没想过这样用
你先察看StringList的COUNT嘛。
而且什么叫溢出,你这最多是越界嘛(如果确实只有一行的话)
建议还是动态分配+指针吧下边是函数的顺序,
(SDK函数,我对PASCAL的文件函数用的比较少)
CreateFile
GetFileSize
GetMemory
ReadFile
CloseHandle
Freememory
 
試試這個.
procedure TForm1.Button1Click(Sender: TObject);
var
FStream:TFileStream;
SStream:TStringStream;
begin
FStream:=TFileStream.Create('C:/Test.txt',fmOpenRead);
try
SStream:=TStringStream.Create('');
try
SStream.CopyFrom(FStream);
ShowMessage(SStream.DataString);

finally
SStream.Free;
end;
finally
FStream.Free;
end;
end;
 
接受答案了.
 
后退
顶部