Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
1-41457
Вера
2003-10-29 10:42
2003.11.13
Загрузка изобраджения


1-41555
lipskiy
2003-10-23 20:38
2003.11.13
Кто пользовался Virtual Treeview?


1-41154
Ivolg
2003-11-03 12:01
2003.11.13
Звуки из динамика


3-41054
dtm
2003-10-23 12:05
2003.11.13
Откуда вытащить строку


1-41224
SG
2003-11-01 15:09
2003.11.13
Совпадение строк





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский