Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

Определение размера папки.   Найти похожие ветки 

 
off ©   (2003-08-28 10:42) [0]

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


 
off ©   (2003-08-28 12:04) [1]

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


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

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


 
Werewolfru ©   (2003-08-28 12:18) [3]

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


 
off ©   (2003-08-28 13:13) [4]

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


 
Off ©   (2003-08-28 16:20) [5]

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


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

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


 
off ©   (2003-08-29 07:17) [7]

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

uses FileCtrl;
function DirSize(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"


 
Anatoly Podgoretsky ©   (2003-08-29 07:25) [8]

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


 
Off ©   (2003-08-29 08:22) [9]

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


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

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


 
Off ©   (2003-08-29 09:24) [11]

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


 
Off ©   (2003-08-29 09:24) [12]

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


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

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


 
DVM ©   (2003-08-31 19:36) [14]

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;


 
off ©   (2003-09-01 11:53) [15]

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


 
off ©   (2003-09-01 12:11) [16]

Похоже проблема не в юзес. При включении функции в код возникают след. ошибки:
[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"


 
HolACost! ©   (2003-09-01 12:57) [17]

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


 
HolACost! ©   (2003-09-01 12:58) [18]

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


 
DVM ©   (2003-09-02 14:39) [19]


> off ©

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



Страницы: 1 вся ветка

Текущий архив: 2003.11.13;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.024 c
3-41021
Vadim S
2003-10-15 17:58
2003.11.13
Ошибка при выполнении запроса MS SQL


14-42064
zzet
2003-10-21 14:20
2003.11.13
Задача про 12 монет. Возвращение.


8-41753
Ozone
2003-07-07 09:34
2003.11.13
Рисование на рабочем столе


1-41146
Seldon
2003-11-04 21:26
2003.11.13
следующий TabStop


6-41811
Геннадий
2003-09-15 17:18
2003.11.13
Как программно изменить настройки TCP/IP (в частности, IP-адрес)?