Форум: "WinAPI";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизОпределение размера папки. Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.055 c