Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Определение размера папки. [D6, WinXP]


off ©   (2003-08-28 10:42:00) 

Доброго времени суток мастера. С некоторого момента свободное место на жестком стало катострофически пропадать. При этом количество всевозможных папок, соответственно, увеличивается. И очень трудно следить за их размером. Вот и решил я написать простенький "файловый (папковый) менеджер" наподобие проводника только чтобы еще показывал размер текущей папки. А чем воспользоваться ShellTreeView, или DirectoryListBox, или еще чем я не знаю.
Да и главная проблема: как программно определить размер папаки?


DVM   (2003-09-02 14:39:00) [1]


> off ©

Все работает, ничего в uses писать не надо.


HolACost!   (2003-09-01 12:58:00) [2]

Имеется ввиду удалить и дописать - в начале и в конце каждой строки!


HolACost!   (2003-09-01 12:57:00) [3]

Нефига в чистую копировать из форума - поубивай все пробелы и прочую гадость к каждой строке!


off   (2003-09-01 12:11:00) [4]

Похоже проблема не в юзес. При включении функции в код возникают след. ошибки:
[Error]Unit1.pas(517): Illegal character in input file: " " ($A0)
[Error]Unit1.pas(517): Types of actual and formal var parameters must be identical
и как следствие:
[Fatal Error]Project1.dpr(5): Could not compile used unit "Unit1.pas"


off   (2003-09-01 11:53:00) [5]

2 DVM © (31.08.03 19:36)
А usesчто добавить?


DVM   (2003-08-31 19:36:00) [6]

function GetDirectorySize(const Path: string): Int64;
var
FD : TWin32FindData;
FH : THandle;
TempSize: TULargeInteger;
begin
Result := 0;
if Path="" then exit;
if not(DirExists(Path)) then exit;
FH := FindFirstFile( PChar( Path + "*.*" ), FD );
repeat
if (FH<>INVALID_HANDLE_VALUE) and (FD.cFileName <> string(".")) and
(FD.cFileName<>string("..")) then
begin
if (FILE_ATTRIBUTE_DIRECTORY and FD.dwFileAttributes) <> 0 then
Inc(Result, GetDirectorySize(Path + FD.cFileName + "\"))
else
begin
TempSize.LowPart := FD.nFileSizeLow;
TempSize.HighPart := FD.nFileSizeHigh;
Inc(Result, TempSize.QuadPart);
end;
end;
until FindNextFile(FH,FD) = false;
FindClose(FH);
end;


Е-Моё имя   (2003-08-30 09:32:00) [7]

Удалено модератором
Примечание: Offtopic


Off   (2003-08-29 09:24:00) [8]

Удалено модератором


Off   (2003-08-29 09:24:00) [9]

Пасиб, ... черт побери ...
я вас, наверное уже замучил.


Anatoly Podgoretsky   (2003-08-29 08:58:00) [10]

Второе и рекомендуеся взять работу с FindFirst c моего сайта fido7.ru.delphi FAQ (HTML вариант) там с улучшеииями от ЮЗ


Off   (2003-08-29 08:22:00) [11]

А "Чаво", это чаво? Статьи или Ф А К"ю?


Anatoly Podgoretsky   (2003-08-29 07:25:00) [12]

Выбрось ты ее, это просто совсем не рабочее, человек который это писал очень слабо разбирается в программирование, похоже воспользовался Ctrl+C, Ctrl+V из других источников. За основу возьми из местного Чаво и просто добавь суммирование размера.


off   (2003-08-29 07:17:00) [13]

На отрекомендованном сайте http://Delphiworld.narod.ruесть статья ( http://delphiworld.narod.ru/base/get_dir_size.html) со след. кодом:

usesFileCtrl;
functionDirSize(Dir: string): integer;
var
SearchRec: TSearchRec;
Separator: string;
DirBytes: integer;
begin
Result:=-1;
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
DirBytes := DirBytes + SearchRec.Size
else
if DirectoryExists(Dir+Separator+SearchRec.name) then
begin
if (SearchRec.name<>".") and (SearchRec.name<>"..") then
DirSize(Dir+Separator+SearchRec.name);
end;
while FindNext(SearchRec) = 0 do
begin
if FileExists(Dir+Separator+SearchRec.name) then
DirBytes := DirBytes + SearchRec.Size
else
if DirectoryExists(Dir+Separator+SearchRec.name) then
begin
if (SearchRec.name<>".") and (SearchRec.name<>"..") then
DirSize(Dir+Separator+SearchRec.name);
end;
end;
end;
FindClose(SearchRec);
Result:=DirBytes;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
DirBytes: integer;
begin
DirBytes := DirSize("c:\windows");
Form1.Label1.Caption := IntToStr(DirBytes);
end;

Вроде бы Ctrl+C, Ctrl+V я уже освоил а как из этого получить рабочий код еще не знаю.
Может кто подскажет почему функция для любой папки возвращает одно и тоже значение отличное от "-1"


Е-Моё имя   (2003-08-28 16:30:00) [14]

ну какие предложения могут быть? взять все файлы вложенные и суммировать их размер


Off   (2003-08-28 16:20:00) [15]

А еще предложения будут?


off   (2003-08-28 13:13:00) [16]

Werewolfru © (28.08.03 12:18) [3]
Пасиб


Werewolfru   (2003-08-28 12:18:00) [17]

visit Delphiworld.narod.ru, там примеров море!!!!


off   (2003-08-28 12:04:00) [18]

Удалено модератором
Примечание: Offtopic


Е-Моё имя   (2003-08-28 12:04:00) [19]

Удалено модератором
Примечание: Offtopic


Наверх

Титульная страница Поиск, карта сайта Написать письмо