Размер каталога

Обсуждение любых программ, не имеющих отношения к Total Commander.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Ответить
Makar
Сообщения: 5
Зарегистрирован: Вт окт 15, 2013 20:22

Размер каталога

Сообщение Makar »

Доброго времени суток!
Дали мне задание, написать программу, которая будет повторять действие комбинации клавиш CTRL+L TotalCommander'a.
На C# (WindowsForms) файловый менеджер написал, размеры каталогов и файлов получаю. Далее возникла проблема: размер файла с учетом размера кластера определить просто (размер файла делим на размер кластера, округляем в большую сторону и умножаем на размер кластера), а для каталога это не подходит (контрольная программа - TotalCommander). Подскажите пожалуйста, как определить размер каталога с учетом размера кластера?
Serge Yolkin
Сообщения: 664
Зарегистрирован: Сб июл 25, 2009 11:12

Сообщение Serge Yolkin »

Суммировать размеры файлов с учётом размера кластера...
Makar
Сообщения: 5
Зарегистрирован: Вт окт 15, 2013 20:22

Сообщение Makar »

Serge Yolkin писал(а):Суммировать размеры файлов с учётом размера кластера...
не работает

Код: Выделить всё

public  long DirSize(DirectoryInfo d)
        {  long Size = 0;
            DirectoryInfo[] dis = d.GetDirectories();// тянем каталоги
            foreach (DirectoryInfo di in dis)
            { try
                {  Size += DirSize(di);//и понеслась рекурсия
                    count_dir++;
                }
                catch
                {//DirectoryInfo получает исключение при защищенных от 
                  //чтения файлах, если не ошибаюсь
                    count_dir++;
                }
            }
            FileInfo[] fis = d.GetFiles();//тянем файлы из текущей
            foreach (FileInfo fi in fis)
            {      Size += fi.Length;
                    count_file++;
            }
            return (Size);//возвращаем размер всего каталога (в байтах)
        }
если полученный размер (с тем, что выдает ТС - совпадает, так же как количество файлов и каталогов) поделить на размер кластера, округлить в большую сторону и умножить на размер кластера, то результат не совпадает с ТС. Скорее всего, на него влияет количество папок с файлами
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Размеры голых папок тождественно равны нулю, учитываются только размеры файлов: создай пустую структуру и измерь её размер.

Нет ли в папке сжатых файлов?
Makar
Сообщения: 5
Зарегистрирован: Вт окт 15, 2013 20:22

Сообщение Makar »

извиняйте, сбрехал я, голова уже не сильно работает,
Serge Yolkin писал(а):Суммировать размеры файлов с учётом размера кластера...
работает, но для простых файлов (*.doc, *.txt, *.ехе). А вот каталог с файлами (*.sdf, *.sln и прочими файлами проекта VS) выдает размер больше. Архивов там нет точно, сжатых вроде тоже
GGS
Сообщения: 322
Зарегистрирован: Сб май 02, 2009 13:00

Сообщение GGS »

IMHO, на размер с учётом кластеров должна влиять фрагментация файла.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

GGS,
Нисколько. На размер с учетом кластеров и без влияют остаток в последнем кластере (в большую сторону), NTFS-сжатие файла и разреженность (в меньшую сторону).

Makar,
А список исключений у тебя в тотале используется? Тотал не считает исключенные файлы. А скрытые файлы точно все перечисляешь? Сравнивай лучше с размерами папки в её свойствах, там точно будет без исключений.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

MVV писал(а):Тотал не считает исключенные файлы.
Начиная с версии 8.50...
Makar
Сообщения: 5
Зарегистрирован: Вт окт 15, 2013 20:22

Сообщение Makar »

пробовал через свойства папки, с тоталом совпадает. Музыкальные файлы (они сжатые, если не ошибаюсь) и архивы как-то иначе считаются? У меня выходит размер выходит на 13 кластеров больше (количество файлов совпадает, скрытых нет, хотя программа их видит)
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

У тебя, вижу, сложности с NTFS-сжатием. NTFS-сжатие - это сжатие на уровне файловой системы, выражается в том, что блоки (по 16 кластеров, кажется) на диске сохраняются в сжатом виде, при этом в MFT указывается, сколько физических кластеров это заняло. И при подсчете размеров с учетом кластеров получается значение, меньшее (если сжатие успешное), чем при подсчете непосредственных размеров. Сжат файл или нет, определяется наличием атрибута C, и это никак не связано с содержимым файла.
Makar
Сообщения: 5
Зарегистрирован: Вт окт 15, 2013 20:22

Сообщение Makar »

всем спасибо за помощь!
Ответить