帮我看一段程序,统计一个目录的大小 ,不知问题在哪里,得到的结果不对,顶者有分!!!!!!!!!!!
function tform1.countd(cPath:string):longint;
var
sr:tsearchrec;
at:integer;
begin
at:=sysutils.faReadOnly+sysutils.faHidden+faSysFile+faVolumeID+faDirectory+faArchive+faAnyFile;
//result:=0;
if findfirst(cpath,at,sr)=0 then
begin
repeat
if sr.name='.' then
continue;
if (sr.Attr and fadirectory) = fadirectory then
countd(sr.Name)
else
result:=sr.Size;
until FindNext(sr) <> 0;
FindClose(sr);
end;
end;
帮我看一段程序,统计一个目录的大小 ,不知问题在哪里,得到的结果不对,顶者有分!!!!!!!!!!!
问题点数:20、回复次数:8Top
1 楼syl66666(苏)回复于 2006-03-04 11:23:25 得分 0
帮忙解决哦Top
2 楼syl66666(苏)回复于 2006-03-05 20:50:08 得分 0
顶Top
3 楼cjianwen(空前)回复于 2006-03-05 20:59:39 得分 5
好晕,result:=sr.Size 这个是目录大小?
这个结构体变量的大小~初始化的时候设置~Top
4 楼syl66666(苏)回复于 2006-03-05 21:03:20 得分 0
这个程序递归?????????Top
5 楼cuteant(我这张旧床票还能否登上你的破床|涛声是否依旧)回复于 2006-03-05 21:06:50 得分 15
countd(sr.Name) //这个是函数,不是过程
result:=sr.Size;//这样就没有累加的过程了
直接给段程序给你吧:
function GetDirectorySize(Path: String): Integer; //eg. Path = 'c:\temp\'
var
SR: TSearchRec;
begin
Result := 0;
if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
begin
if (sr.Name <> '.') and (sr.Name <> '..') and (sr.Attr = faDirectory) then
Result := Result + GetDirectorySize(Path+Sr.Name+'\')
else
Result := Result + Sr.Size;
while FindNext(sr) = 0 do
if (sr.Name <> '.') and (sr.Name <> '..') and (sr.Attr = faDirectory) then
Result := Result + GetdirectorySize(Path+Sr.Name+'\')
else
Result := Result + Sr.Size;
FindClose(sr);
end;
end;
Top
6 楼syl66666(苏)回复于 2006-03-05 21:10:49 得分 0
cjianwen(空前) ( ) 信誉:100 2006-03-05 20:59:00 得分: 0
好晕,result:=sr.Size 这个是目录大小?
这个结构体变量的大小~初始化的时候设置~
sr.size是文件的大小
Top
7 楼syl66666(苏)回复于 2006-03-05 21:15:50 得分 0
不行,递归有问题Top
8 楼syl66666(苏)回复于 2006-03-05 21:35:05 得分 0
返回值上Top




