菜鸟诚求高手帮助,倾家送分!(200分)

  • 主题发起人 主题发起人 aniceking
  • 开始时间 开始时间
A

aniceking

Unregistered / Unconfirmed
GUEST, unregistred user!
程序运行,读取一个文本文件(很大有5M左右,2W行左右,内容是文件的路径),然后分析处理.
根据文件内容得到的路径获取该文件大小,如果小于指定大小(比如100MB)暂不处理,继续获取下一个文件大小累加直到大与指定大小(如100MB)调用外部程序处理这些文件,(但如遇到一个文件大小直接大于指定大小时,就直接调用外部程序处理前面的文件和该文件,然后继续以此往下处理),应该怎么做呢,最好能给个详细点的代码,谢谢了.
 
思路:
1、加载文本文件,每次读取一行得到文件路径;
2、根据路径判断文件是否存在,如果存在判断文件大小;用一个数组记录文件大小,用一个boolean变量记录累加的文件大小,循环中判断累加文件大小的职是否大于100M,是则true-调用外部程序处理,否则false,继续下一个文件。
关键是在一个循环中判断,然后采取相应的处理方法。
如果要处理方便可以将这个文件导入数据库中,将每个文件大小写入Size字段。
代码应该不难写的,关键的几个函数想都想的到:FileExists、WinExec。
这就是我想到的,希望对你有用。
 
function getfilesize(cfile:string):integer;
//文件大小 fang.2002.12.23
var sr: TSearchRec;
begin
if findfirst(cfile,faAnyFile,sr)=0 then
result:=sr.Size
else
result:=0;
findclose(sr);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i,j : integer;
nFileSize : integer;
begin
nFileSize := 0;
for i := memo1.Lines.Count-1do
wnto 0do
begin
if FileExists(memo1.Lines) then
begin
nFileSize := nFileSize + getfilesize(memo1.Lines);
if nFileSize>1024 then
//指定大小
begin
for j := memo1.Lines.Count-1 to 0do
begin
shellexecute(self.handle,pchar(memo1.Lines),nil,nil,sw_shownormal);
memo1.Lines.Delete(j);
end;
nFileSize := 0 ;
end;
end;

end;
end;
 
谢谢两位的帮助,我的意思是如何实现多线程操作,因为数据量相对较大,所以想用多线程先对总文件行数分析,然后分块,比如1W行,分10块,每个块1000条数据,用10个线程分块处理,如果满足处理条件的,由此线程再创建线程进行操作,这样是不是可以提高速度呢?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部