Размер каталога
Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik
Размер каталога
Доброго времени суток!
Дали мне задание, написать программу, которая будет повторять действие комбинации клавиш CTRL+L TotalCommander'a.
На C# (WindowsForms) файловый менеджер написал, размеры каталогов и файлов получаю. Далее возникла проблема: размер файла с учетом размера кластера определить просто (размер файла делим на размер кластера, округляем в большую сторону и умножаем на размер кластера), а для каталога это не подходит (контрольная программа - TotalCommander). Подскажите пожалуйста, как определить размер каталога с учетом размера кластера?
Дали мне задание, написать программу, которая будет повторять действие комбинации клавиш CTRL+L TotalCommander'a.
На C# (WindowsForms) файловый менеджер написал, размеры каталогов и файлов получаю. Далее возникла проблема: размер файла с учетом размера кластера определить просто (размер файла делим на размер кластера, округляем в большую сторону и умножаем на размер кластера), а для каталога это не подходит (контрольная программа - TotalCommander). Подскажите пожалуйста, как определить размер каталога с учетом размера кластера?
-
Serge Yolkin
- Сообщения: 664
- Зарегистрирован: Сб июл 25, 2009 11:12
не работает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);//возвращаем размер всего каталога (в байтах)
}
извиняйте, сбрехал я, голова уже не сильно работает,
работает, но для простых файлов (*.doc, *.txt, *.ехе). А вот каталог с файлами (*.sdf, *.sln и прочими файлами проекта VS) выдает размер больше. Архивов там нет точно, сжатых вроде тожеSerge Yolkin писал(а):Суммировать размеры файлов с учётом размера кластера...
GGS,
Нисколько. На размер с учетом кластеров и без влияют остаток в последнем кластере (в большую сторону), NTFS-сжатие файла и разреженность (в меньшую сторону).
Makar,
А список исключений у тебя в тотале используется? Тотал не считает исключенные файлы. А скрытые файлы точно все перечисляешь? Сравнивай лучше с размерами папки в её свойствах, там точно будет без исключений.
Нисколько. На размер с учетом кластеров и без влияют остаток в последнем кластере (в большую сторону), NTFS-сжатие файла и разреженность (в меньшую сторону).
Makar,
А список исключений у тебя в тотале используется? Тотал не считает исключенные файлы. А скрытые файлы точно все перечисляешь? Сравнивай лучше с размерами папки в её свойствах, там точно будет без исключений.
У тебя, вижу, сложности с NTFS-сжатием. NTFS-сжатие - это сжатие на уровне файловой системы, выражается в том, что блоки (по 16 кластеров, кажется) на диске сохраняются в сжатом виде, при этом в MFT указывается, сколько физических кластеров это заняло. И при подсчете размеров с учетом кластеров получается значение, меньшее (если сжатие успешное), чем при подсчете непосредственных размеров. Сжат файл или нет, определяется наличием атрибута C, и это никак не связано с содержимым файла.