![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определение размера папки. [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