View Full Version : چگونگی بدست آوردن حجم یک پوشه (Folder)
  
nasr
یک شنبه 14 مهر 1387, 11:58 صبح
سلام
 
چطور میشه حجم یک فولدر را بدست آورد؟
 
ممنون
Felony
دوشنبه 15 مهر 1387, 06: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, 06:54 صبح
سلام
این کد مثل اینکه به صورت Random یه عدد میده
و با هر بار اجرای کد یه عددی میده 
 
ممنون
Felony
سه شنبه 16 مهر 1387, 14:19 عصر
رندوم عدد میده ؟ والا من اینجا نه از دستور رندوم استفاده کردم نه کاری کردم که همچین اتفاقی بیافته ، کد رو اون موقع که گزاشتم تست کردم درست بود ، دوستان دیگه نظری ندارند ؟
Mahmood_M
چهارشنبه 17 مهر 1387, 00: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, 04: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.