请教!为什么不能连续打开文件?(100分)(100分)

  • 主题发起人 主题发起人 zhengv
  • 开始时间 开始时间
Z

zhengv

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
var
f:textfile;
my2:string;
arec: TSearchRec;
begin
findfirst('c:/*.txt',faAnyFile,arec);//查找文件相同文件名
while findnext(arec)=0 do
begin
if arec.Name<>'' then
//文件名不为空则连续打开文件
assignfile(f,'c:/'+arec.Name);
reset(f);
while not eof(f) do
begin
read(f,my2);
form1.Memo1.lines.add(my2);
form1.memo2.lines.Add(arec.Name);
end;
findclose(arec);
end;
end;
end.
问题是不能连续打开文件,我对文件使用菜鸟一个,高人指路!
 
reset(f);
while not eof(f) do
begin
read(f,my2);
form1.Memo1.lines.add(my2);
form1.memo2.lines.Add(arec.Name);
end;
CloseFile(f);//加这句
 
你的文件在第一次打开过后就一直没有关闭,怎么打开第二次?
在 findclose 前面一行加入:
System.CloseFile(f);
 
照上面的方法试了不行啊!还是不明白.
 
把你的代码改写了一下:
procedure TForm1.Button1Click(Sender: TObject);
var
f:textfile;
my2:string;
arec: TSearchRec;
begin
findfirst('c:/*.txt',faAnyFile,arec);//查找文件相同文件名
while findnext(arec)=0 do
begin
if arec.Name<>'' then
//文件名不为空则连续打开文件
begin
assignfile(f,'c:/'+arec.Name);
reset(f);
while not eof(f) do
begin
readln(f,my2);
form1.Memo1.lines.add(my2);
end;
CloseFile(f);
end;
form1.memo2.lines.Add(arec.Name);
end;
findclose(arec);
end;
end.
-------------------
但注意MEMO有64K的限制。
 
以上代码只打开显示一个文件,不能循环打开找到的文件,想知道原因。
 
给个答案好吗?
 
kingdeezj的方法是可以的,但是少打开一个文件,需要改一下,可以改为 repeat...until 循环
repeat
if arec.Name<>'' then
//文件名不为空则连续打开文件
begin
assignfile(f,'c:/'+arec.Name);
reset(f);
while not eof(f) do
begin
readln(f,my2);
form1.Memo1.lines.add(my2);
end;
CloseFile(f);
end;
form1.memo2.lines.Add(arec.Name);
until(findnext(arec)<>0);
Memo有限制,RichEdit也有限制,文件太大,会报错误
 
文件搜索代码没有问题,但在把文件打开后似乎关闭不了,以至不能循环打开下个文件。
以上代码都试了不行,错在那里呢?用fileopen?用API?上帝和你都等能帮助我,上帝不
在我身边,只好求你了。
 
procedure TForm1.Button1Click(Sender: TObject);
var
f:textfile;
my2:string;
arec: TSearchRec;
begin
findfirst('c:/*.txt',faAnyFile,arec);//查找文件相同文件名
repeat
if arec.Name<>'' then
//文件名不为空则连续打开文件
begin
assignfile(f,'c:/'+arec.Name);
reset(f);
while not eof(f) do
begin
readln(f,my2);
form1.Memo1.lines.add(my2);
end;
CloseFile(f);
end;
form1.memo2.lines.Add(arec.Name);
until(findnext(arec)<>0);
findclose(arec);
end;
end.

以上代码我已经帮你试了一次,在win98上没有一点问题啊。
 
to zhengv
如果的文件大小加起来不超过Memo的容量,以上代码没有问题,但是我不知道你的局要求,因为以上代码吧所有的文件都在Memo中打开,一个连着一个,如果你的每一个文件的结尾没有标示的话,不好区分是几个文件,你再试一试吧,没问题的
 
谢谢大家!
 
多人接受答案了。
 
后退
顶部