Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> КАК узнать обьем папки? 
:(
    Опции темы
vood
Дата 23.2.2006, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 23.2.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



КАК узнать обьем папки?


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
remax
Дата 23.2.2006, 02:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

Репутация: 1
Всего: 5



Если подразумевается суммарный объем файлов, то соответственно придется перебирать файлы, входящие в эту папку с учетом вложенных папок.


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
<Spawn>
Дата 23.2.2006, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Рекурсией. Темы обхода директорий не раз были на форуме. Поищите их и на этой основе легко будет посчитать общий размер.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Guedda
Дата 23.2.2006, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Код

type
  TGetDirSizeCallback = procedure(Tag: Integer; CurrentSize: Int64);

procedure GetDirSize(Dir: string; IncludeSubDirs: Boolean; var Result: Int64;
  CallbackProc: TGetDirSizeCallback = nil; CallbackTag: Integer = 0); overload;
var
  SearchRec: TSearchRec;
  FindResult: Integer;
begin
  Dir := IncludeTrailingBackslash(Dir);
  FindResult := FindFirst(Dir + '*.*', faAnyFile, SearchRec);
  try
    while FindResult = 0 do
      with SearchRec do
      begin
        if (Attr and faDirectory) <> 0 then
        begin
          if IncludeSubDirs and (Name <> '.') and (Name <> '..') then
            GetDirSize(Dir + Name, IncludeSubDirs, Result, CallbackProc,
              CallbackTag);
        end
        else
        begin
          Result := Result + Cardinal(Size);
          if Assigned(CallbackProc) then
            CallbackProc(CallbackTag, Result);
        end;
        FindResult := FindNext(SearchRec);
      end;
  finally
    FindClose(SearchRec);
  end;
end;

function GetDirSize(Dir: string; IncludeSubDirs: Boolean = True): Int64;
  overload;
begin
  GetDirSize(Dir, IncludeSubDirs, Result, nil, 0);
end;

Пример использования:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  S: Int64;
begin
  S := 0;
  GetDirSize('с:\WINDOWS', True, S, @TForm1.GetDirCallback, Integer(Self));
  Label1.Caption := IntToStr(S);
end;

procedure TForm1.GetDirCallback(CurrentSize: Int64);
begin
  Label1.Caption := IntToStr(CurrentSize);
  Label1.Repaint;
end;





--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
vood
Дата 25.2.2006, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 23.2.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Пасибо? Vinyl Man
Добавлено @ 07:27
Пасибо, Vinyl man


--------------------
Вы все еще курите ? Тогда мы идем к вам
 
PM MAIL ICQ   Вверх
MetalFan
Дата 20.7.2009, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Guedda, всем хорош код, но может криво считаться размер при использовании сокращенной GetDirSize.
а все потому, что Result не инициализирован нулем.
10 минут голову ломал, что за нафиг smile )

Добавлено @ 12:14
+ еще не уверен, что корректно будет работать колбэк в примере...

Это сообщение отредактировал(а) Rrader - 20.7.2009, 15:00


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Yanis
Дата 20.7.2009, 13:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Размер папки можно узнать через Microsoft Windows Script (через объект FSO):
Код
var
  oFS: Variant;
  sz: Integer;
begin
  oFS := CreateOleObject('Scripting.FileSystemObject');
  ShowMessage(string(oFS.GetFolder('c:\windows\help').Size div 1024) + ' KB');
end;

Надеюсь пояснять не требуется. Экзампл всё сам за себя говорит.

Это сообщение отредактировал(а) Yanis - 20.7.2009, 13:56


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
MetalFan
Дата 20.7.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Yanis, супер) а может такое быть, что Microsoft Windows Script не устанволен на клиентской машине?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
CodeMonkey
Дата 20.7.2009, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Интересно, как последний вариант решает эти вопросы.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Yanis
Дата 20.7.2009, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(MetalFan @  20.7.2009,  15:16 Найти цитируемый пост)
а может такое быть, что Microsoft Windows Script не устанволен на клиентской машине? 


*Задумался* Знаешь, мне кажется нет ничего такого, что не могло бы случиться с пользовательской машиной. Наверняка найдутся такие индивиды, которые в ходе экспериментов с системой каким-то образом удалили какую-то часть WS. Реестр, знатно, можно по всякому изуродовать. Но, на девственной винде XP пример должен работать без докручивания.

Сам объект FSO хранится в так называемой Scripting Type Library (C:\WINDOWS\system32\scrrun.dll). Т.е. эта либа должна быть зарегена в системе, чтобы мы могли получить доступ к FSO.

Если сделать:
Код
regsvr32 /u scrrun.dll

то будет ошибка при попытке создать класс FSO:
Цитата
---------------------------
Project1
---------------------------
Недопустимая строка с указанием класса, ProgID: "Scripting.FileSystemObject"
---------------------------
ОК   
---------------------------


Если есть опасения, что либа может не присутствовать, то можно тоскать с собой длл-у и делать ей «regsvr32 scrrun.dll».

Добавлено через 3 минуты и 34 секунды
Цитата(Yanis @  20.7.2009,  15:58 Найти цитируемый пост)
Если есть опасения, что либа может не присутствовать, то можно тоскать с собой длл-у и делать ей «regsvr32 scrrun.dll». 

Но это, конечно, изврат. Проще самому по папке пробежать и посчитать.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Yanis
Дата 20.7.2009, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(CodeMonkey @ 20.7.2009,  15:19)
Интересно, как последний вариант решает эти вопросы.

Полагаю, что узнать это можно только лишь экспериментальным путём.

Это сообщение отредактировал(а) Yanis - 20.7.2009, 15:38


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
MetalFan
Дата 20.7.2009, 17:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



CodeMonkey, ну вопросы я бы сказал там специФИЧЕские) в большинстве случаев можно о них не беспокоиться имхо.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
CodeMonkey
Дата 20.7.2009, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



Почему-же? К примеру, наличие hard-link - не такая уж редкая ситуация. И чем дальше - тем чаще такое будет встречаться.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Riply
Дата 21.7.2009, 03:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 3
Всего: 32



Цитата(CodeMonkey @  20.7.2009,  19:35 Найти цитируемый пост)
Почему-же? К примеру, наличие hard-link - не такая уж редкая ситуация. И чем дальше - тем чаще такое будет встречаться. 


Угу. Поставила тут Win 7 посмотреть с чем едят сие чудо.
Так там и плюнуть на системном диске некуда - обязательно на какой-нибудь редирект попадешь smile
Sorry за оффтоп.


Цитата(MetalFan @  20.7.2009,  17:41 Найти цитируемый пост)
ну вопросы я бы сказал там специФИЧЕские) в большинстве случаев можно о них не беспокоиться имхо.


Ну почему же ? 
Говорят, что KV плодит файловые потоки без всякого зазрения совести и в огромных количествах smile

Это сообщение отредактировал(а) Riply - 21.7.2009, 03:31
PM MAIL   Вверх
MetalFan
Дата 21.7.2009, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Riply, кто такой KV? )


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Riply
Дата 21.7.2009, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 3
Всего: 32



Цитата(MetalFan @  21.7.2009,  13:06 Найти цитируемый пост)
Riply, кто такой KV? ) 


Sorry, если не так его обозвала.
Имелся ввиду антивирус Касперского или Кашперовского.
Черт ! Все время их путаю, уж очень похожи smile
PM MAIL   Вверх
Yanis
Дата 21.7.2009, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Riply @  21.7.2009,  14:12 Найти цитируемый пост)
Черт ! Все время их путаю, уж очень похожи

То есть, есть Антивирус Касперского и Кашперовского?  smile 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Riply
Дата 21.7.2009, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 3
Всего: 32



Yanis, неа.  Антивирус, вроде один.
А вот кто его автор, все время путаю smile

P.S.
 Ой, чуствую забанят меня за флуд злостный smile

PM MAIL   Вверх
MetalFan
Дата 21.7.2009, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Riply, тебя забанят? не смеши)
да, антивирус касперского - жесть.
Но опять же повторюсь, для общего случая достаточно посчитать просто объем всех файлов рекурсивно


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Riply
Дата 21.7.2009, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 3
Всего: 32



Цитата(MetalFan @  21.7.2009,  15:33 Найти цитируемый пост)
Но опять же повторюсь, для общего случая достаточно посчитать просто объем всех файлов рекурсивно 


Ну для чего нам это может понадобиться ?
Самые жизненные варианты типа: выяснить хватит ли нам места для копирования на флешку или еще куда.
И, как раз здесь, мы и можем попасть в засаду из-за потоков или редиректов...
Разумеется, если мы только хотим вывести куда-то информацию, то пойдет... для красоты smile,
ибо другой практической ценности у нее не будет, т.к. она может не соответствовать действительности.
PM MAIL   Вверх
MetalFan
Дата 21.7.2009, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(Riply @  21.7.2009,  16:20 Найти цитируемый пост)
она может не соответствовать действительности. 

ключевое слово тут - может, а может и соответствовать) а какая практическая ценность у размера с учетом потоков, кластеров и пр.? при копировании, например, какую пользу она может принести? разве скрытые потоки копируются(простите за неосведомленность)?

Это сообщение отредактировал(а) MetalFan - 21.7.2009, 19:48


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
AntonN
Дата 21.7.2009, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 3
Всего: 18



Цитата

разве скрытые потоки копируются(простите за неосведомленность)?

при копировании, проверенного касперским, файла на флешку с fat32 система честно предупреждает, что будут утеряны некоторые в файловых потоках прикрепленные к этому файлу. Соответственно - копируются smile


--------------------
user posted image
PM MAIL WWW   Вверх
MetalFan
Дата 21.7.2009, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(AntonN @  21.7.2009,  20:57 Найти цитируемый пост)
будут утеряны


Цитата(AntonN @  21.7.2009,  20:57 Найти цитируемый пост)
Соответственно - копируются

хм, как-то нелогично выходит) если с нтфс на фат копировать, то выходит, что не копируются...


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
AntonN
Дата 21.7.2009, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 3
Всего: 18



с нтфс на фат - нет, а с нтфс на нтфс - да


--------------------
user posted image
PM MAIL WWW   Вверх
Riply
Дата 22.7.2009, 05:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 3
Всего: 32



Цитата(MetalFan @  21.7.2009,  19:48 Найти цитируемый пост)
а какая практическая ценность у размера с учетом потоков, кластеров и пр.? при копировании, например, какую пользу она может принести? 


А я и не говорила что она есть smile
В этом вопросе, я полностью солидарна с CodeMonkey в плане того,
что в общем случае  задача решения не имеет.

Топиковый вопрос приобретает смысл, только с детальными пояснениями для
чего вся эта каша нам понадобилась и что мы хотим получить в конце.
Под детальными пояснениями я понимаю ответы почти на все вопросы, перечисленные CodeMonkey. 

Цитата(MetalFan @  21.7.2009,  19:48 Найти цитируемый пост)
разве скрытые потоки копируются(простите за неосведомленность)?

Могут копироваться, а могут и нет.
Завсит от FS и от способа копирования.


Это сообщение отредактировал(а) Riply - 22.7.2009, 05:09
PM MAIL   Вверх
MetalFan
Дата 22.7.2009, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Усе понятно)
Но я то хотел обратить внимание копипастеров приведенного ранее куска кода для подсчета размера файлов в папках, что он содержит недочет... вот)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Riply
Дата 22.7.2009, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 3
Всего: 32



Цитата(MetalFan @  22.7.2009,  18:41 Найти цитируемый пост)
Но я то хотел обратить внимание копипастеров приведенного ранее куска кода для подсчета размера файлов в папках, что он содержит недочет... вот) 


Святое дело (без смайлика)

smile
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1752 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.