delphi 连续读取多个txt文件
delphi连续读取多个txt文件.同一个文件夹下会实时的产生TXT文档,其内容会显示在同一行上,我要读取到Memo,并会做判断,然后截取其内容抛到另一个LIST中,然后...
delphi 连续读取多个txt文件.同一个文件夹下会实时的产生TXT文档,其内容会显示在同一行上,我要读取到Memo,并会做判断,然后截取其内容抛到另一个LIST中,然后,movefile,接着打开第二个文本文件,如此循环。怎么写,请高手指点,非常感谢!
展开
4个回答
展开全部
完全可以实现,我写了一个函数,给分吧
procedure search(dir:string);
var
targetpath:string;{目标路径名}
sr:TsearchRec;
strlist:TStringList;
str:string;
begin
try
{第一阶段:找出初始dir目录下的所有文件,
其中dir为公共变量,值由你自己去确定}
strlist:=TStringList.Create();
targetpath:=extractfilepath(dir);{分解出目标路径名}
//先找文件
if findfirst(dir,faAnyFile,sr)=0 then
repeat
if((sr.name<>'.')and(sr.name<>'..')and(sr.Attr<>fadirectory)then//排除父目录和本目录两个假文件只取文件}}
begin//如果是文件,就打开并加入了文本框里
strlist.LoadFromFile(targetpath+sr.name);//读取文件
str:=stringreplace(strlist.Tostring,#13,'',[rfReplaceAll]);//把回车符换掉,保证在同一行
form1.memo1.Lines.Add(str);//加入到文本框中
end;
until findnext(sr)<>0;
//找子目录
if findfirst(dir,faanyfile,sr)=0 then
repeat
if(sr.name<>'.')and(sr.name<>'..')and(sr.Attr=fadirectory) then//排除父目录和本目录两个假文件}
//排除文件}
search(targetpath+sr.name+'\*.*');{递归调用}
until findnext(sr)<>0;
finally
findclose(sr);
strlist.free;
end;
end;
procedure search(dir:string);
var
targetpath:string;{目标路径名}
sr:TsearchRec;
strlist:TStringList;
str:string;
begin
try
{第一阶段:找出初始dir目录下的所有文件,
其中dir为公共变量,值由你自己去确定}
strlist:=TStringList.Create();
targetpath:=extractfilepath(dir);{分解出目标路径名}
//先找文件
if findfirst(dir,faAnyFile,sr)=0 then
repeat
if((sr.name<>'.')and(sr.name<>'..')and(sr.Attr<>fadirectory)then//排除父目录和本目录两个假文件只取文件}}
begin//如果是文件,就打开并加入了文本框里
strlist.LoadFromFile(targetpath+sr.name);//读取文件
str:=stringreplace(strlist.Tostring,#13,'',[rfReplaceAll]);//把回车符换掉,保证在同一行
form1.memo1.Lines.Add(str);//加入到文本框中
end;
until findnext(sr)<>0;
//找子目录
if findfirst(dir,faanyfile,sr)=0 then
repeat
if(sr.name<>'.')and(sr.name<>'..')and(sr.Attr=fadirectory) then//排除父目录和本目录两个假文件}
//排除文件}
search(targetpath+sr.name+'\*.*');{递归调用}
until findnext(sr)<>0;
finally
findclose(sr);
strlist.free;
end;
end;
展开全部
根本就不要什么定时
因为可以使用for循环处理,使用定时肯定有问题。
FileNameCount可以是获取目录中的文件数,也可以自己定义。
FileName可以是指定的一个数组,也可以是通过获取目录的文件名数组。
for i:=0 to FileNameCount-1 do
Memo1.Lines.LoadFromFile(fileName[i]);
截取代码过程根据自己的要求做 得到字符串暂存到Str
ListBox1.Items.Add(Str);
end;
因为可以使用for循环处理,使用定时肯定有问题。
FileNameCount可以是获取目录中的文件数,也可以自己定义。
FileName可以是指定的一个数组,也可以是通过获取目录的文件名数组。
for i:=0 to FileNameCount-1 do
Memo1.Lines.LoadFromFile(fileName[i]);
截取代码过程根据自己的要求做 得到字符串暂存到Str
ListBox1.Items.Add(Str);
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.新建一个timer控件,定时间隔为10000ms
2.timer每次执行要获取目标文件夹下txt文档的名称集合
3.遍历这个名称集合中对应的每一个txt文档,获取其内容,放到memo及其他操作
4.遍历每个txt文档后要将这个文档删除(若没其他用的话)
5.若第4步不能删除文档(文档有用),则按照上次遍历的文档的最大创建时间为条件(大于这个时间),进行第2步循环.
6注意在timer中要建立布尔变量,如果上次timer事件没有处理完,则这次直接exit.
没有写code,还是编程思想比较重要吧?渔鱼之别.希望对你有所帮助.
2.timer每次执行要获取目标文件夹下txt文档的名称集合
3.遍历这个名称集合中对应的每一个txt文档,获取其内容,放到memo及其他操作
4.遍历每个txt文档后要将这个文档删除(若没其他用的话)
5.若第4步不能删除文档(文档有用),则按照上次遍历的文档的最大创建时间为条件(大于这个时间),进行第2步循环.
6注意在timer中要建立布尔变量,如果上次timer事件没有处理完,则这次直接exit.
没有写code,还是编程思想比较重要吧?渔鱼之别.希望对你有所帮助.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
理论上是不可能的,问题可能出在代码上。
把代码贴出来具体看看。
把代码贴出来具体看看。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询