View Full Version : چگونگی بدست آوردن حجم یک پوشه (Folder)
nasr
یک شنبه 14 مهر 1387, 10:58 صبح
سلام
چطور میشه حجم یک فولدر را بدست آورد؟
ممنون
Felony
دوشنبه 15 مهر 1387, 05:57 صبح
اول یه فانکشن به صورت زیر باید بنویسید :
var
DirBytes : integer;
function FolderSize(Dir:string):integer;
var
SearchRec : TSearchRec;
Separator : string;
begin
Result:=0;
if Copy(Dir,Length(Dir),1)='\' then
Separator := ''
else
Separator := '\';
if FindFirst(Dir+Separator+'*.*',faAnyFile,SearchRec) = 0 then begin
if FileExists(Dir+Separator+SearchRec.Name) then begin
DirBytes := DirBytes + SearchRec.Size;
end else if DirectoryExists(Dir+Separator+SearchRec.Name) then begin
if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then begin
FolderSize(Dir+Separator+SearchRec.Name) ;
end;
end;
while FindNext(SearchRec) = 0 do begin
if FileExists(Dir+Separator+SearchRec.Name) then begin
DirBytes := DirBytes + SearchRec.Size;
end else if DirectoryExists(Dir+Separator+SearchRec.Name) then
begin
if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then begin
FolderSize(Dir+Separator+SearchRec.Name) ;
end;
end;
end;
end;
FindClose(SearchRec) ;
Result:=DirBytes;
end;
برای استفاده از فانکشن بالا هم :
var size:integer;
begin
size:=Foldersize('C:\Windows');
end;
nasr
سه شنبه 16 مهر 1387, 05:54 صبح
سلام
این کد مثل اینکه به صورت Random یه عدد میده
و با هر بار اجرای کد یه عددی میده
ممنون
Felony
سه شنبه 16 مهر 1387, 13:19 عصر
رندوم عدد میده ؟ والا من اینجا نه از دستور رندوم استفاده کردم نه کاری کردم که همچین اتفاقی بیافته ، کد رو اون موقع که گزاشتم تست کردم درست بود ، دوستان دیگه نظری ندارند ؟
Mahmood_M
سه شنبه 16 مهر 1387, 23:42 عصر
رندوم عدد میده ؟ والا من اینجا نه از دستور رندوم استفاده کردم نه کاری کردم که همچین اتفاقی بیافته ، کد رو اون موقع که گزاشتم تست کردم درست بود ، دوستان دیگه نظری ندارند ؟
مشکل در ابتدای تابع هست ، متغیر DirBytes به صورت عمومی تعریف شده و با هر بار اجرای تابع مقدارش باقی می مونه ، در ابتدای تابع باید مقدارش صفر بشه :
function FolderSize(Dir:string):integer;
var
SearchRec : TSearchRec;
Separator : string;
begin
DirBytes := 0;
Result := 0;
if Copy(Dir,Length(Dir),1)='\' then
...
موفق باشید ...
carbon
پنج شنبه 18 مهر 1387, 03:12 صبح
اينم جالبه
http://www.delphitricks.com/source-code/files/find_out_total_size_of_directory.html
http://www.delphipages.com/threads/thread.cfm?ID=183049&G=183028
GOOGLE IS YOUR FAST FRIEND
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.