读文本文件的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 PLWang
  • 开始时间 开始时间
P

PLWang

Unregistered / Unconfirmed
GUEST, unregistred user!
var str, s : string;
f: TextFile;
begin
AssignFile(f, 'D:/sgip/logdir0504/20050401_LogD.log');
while not SeekEof(f) do begin
Inc(i);
Readln(f, str)

..........
end;
CloseFile(f);
showmessage(inttostr(i));

很简单的代码 只是一行一行读 可是执行时总是停在SeekEof(f)处
raised exception class EInOutError with message 'I/O error 104'
 
var str, s : string;
f: TextFile;
begin
AssignFile(f, 'D:/sgip/logdir0504/20050401_LogD.log');
while not SeekEof(f) do begin
Inc(i);
Readln(f, str)

..........
end;
CloseFile(f);
showmessage(inttostr(i));

很简单的代码 只是一行一行读 可是执行时总是停在SeekEof(f)处
raised exception class EInOutError with message 'I/O error 104'
 
检查文件f: TextFile的状态,确认文件已经被打开
 
我靠,你掉了很重要的部分!!!
AssignFile只是将文件付给f,然后还要打开撒!!!
reset(F)——只读打开
ReWrite(F)——只写打开
Append(F)——追加打开

打开之后才能循环地去读取!
 
var
F: TextFile;
LineStr: string;
begin
if not dlgOpen.Execute then
Exit;
AssignFile(F,dlgOpen.FileName);
Reset(F);
while not Eof(F) do
begin
Readln(F,LineStr);
memo1.Lines.Add(LineStr);//处理当前文本行
end;
CloseFile(F);
end;

该代码已测试,Delphi 2005版本
 
要得到文本有多少行,有个最简单的方法是用TStrings类型
function GetTextFileLineCount(ATextFileName: string): integer;
var
ConText:Tstrings;
begin
ConText:=TStringList.Create;
ConText.LoadFromFile(ATextFileName);
Result:=ConText.Count;
ConText.Free;
end;

然后在过程里调用就可以了:
if dlgOpen.Execute then
ShowMessage(IntToStr(GetTextFileLineCount(dlgOpen.FileName)));

该代码已以测试
 
多人接受答案了。
 
后退
顶部