Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

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

 
Post new topic   Reply to topic    Total Commander Forum Index -> Программное обеспечение printer-friendly view
View previous topic :: View next topic  
Author Message
Makar



Joined: 15 Oct 2013
Posts: 5

Post (Separately) Posted: Tue Oct 15, 2013 20:42    Post subject: Размер каталога Reply with quote

Доброго времени суток!
Дали мне задание, написать программу, которая будет повторять действие комбинации клавиш CTRL+L TotalCommander'a.
На C# (WindowsForms) файловый менеджер написал, размеры каталогов и файлов получаю. Далее возникла проблема: размер файла с учетом размера кластера определить просто (размер файла делим на размер кластера, округляем в большую сторону и умножаем на размер кластера), а для каталога это не подходит (контрольная программа - TotalCommander). Подскажите пожалуйста, как определить размер каталога с учетом размера кластера?
Back to top
View user's profile Send private message
Serge Yolkin



Joined: 25 Jul 2009
Posts: 664

Post (Separately) Posted: Tue Oct 15, 2013 20:58    Post subject: Reply with quote

Суммировать размеры файлов с учётом размера кластера...
Back to top
View user's profile Send private message
Makar



Joined: 15 Oct 2013
Posts: 5

Post (Separately) Posted: Tue Oct 15, 2013 21:26    Post subject: Reply with quote

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

не работает
Code:
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);//возвращаем размер всего каталога (в байтах)
        }

если полученный размер (с тем, что выдает ТС - совпадает, так же как количество файлов и каталогов) поделить на размер кластера, округлить в большую сторону и умножить на размер кластера, то результат не совпадает с ТС. Скорее всего, на него влияет количество папок с файлами
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Tue Oct 15, 2013 21:29    Post subject: Reply with quote

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

Нет ли в папке сжатых файлов?
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Makar



Joined: 15 Oct 2013
Posts: 5

Post (Separately) Posted: Tue Oct 15, 2013 22:14    Post subject: Reply with quote

извиняйте, сбрехал я, голова уже не сильно работает,
Serge Yolkin wrote:
Суммировать размеры файлов с учётом размера кластера...
работает, но для простых файлов (*.doc, *.txt, *.ехе). А вот каталог с файлами (*.sdf, *.sln и прочими файлами проекта VS) выдает размер больше. Архивов там нет точно, сжатых вроде тоже
Back to top
View user's profile Send private message
GGS



Joined: 02 May 2009
Posts: 322

Post (Separately) Posted: Tue Oct 15, 2013 22:14    Post subject: Reply with quote

IMHO, на размер с учётом кластеров должна влиять фрагментация файла.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Tue Oct 15, 2013 22:35    Post subject: Reply with quote

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

Makar,
А список исключений у тебя в тотале используется? Тотал не считает исключенные файлы. А скрытые файлы точно все перечисляешь? Сравнивай лучше с размерами папки в её свойствах, там точно будет без исключений.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Wed Oct 16, 2013 13:25    Post subject: Reply with quote

MVV wrote:
Тотал не считает исключенные файлы.

Начиная с версии 8.50...
Back to top
View user's profile Send private message
Makar



Joined: 15 Oct 2013
Posts: 5

Post (Separately) Posted: Thu Oct 17, 2013 19:03    Post subject: Reply with quote

пробовал через свойства папки, с тоталом совпадает. Музыкальные файлы (они сжатые, если не ошибаюсь) и архивы как-то иначе считаются? У меня выходит размер выходит на 13 кластеров больше (количество файлов совпадает, скрытых нет, хотя программа их видит)
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4811
Location: Ростов-Дон

Post (Separately) Posted: Thu Oct 17, 2013 20:31    Post subject: Reply with quote

У тебя, вижу, сложности с NTFS-сжатием. NTFS-сжатие - это сжатие на уровне файловой системы, выражается в том, что блоки (по 16 кластеров, кажется) на диске сохраняются в сжатом виде, при этом в MFT указывается, сколько физических кластеров это заняло. И при подсчете размеров с учетом кластеров получается значение, меньшее (если сжатие успешное), чем при подсчете непосредственных размеров. Сжат файл или нет, определяется наличием атрибута C, и это никак не связано с содержимым файла.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Makar



Joined: 15 Oct 2013
Posts: 5

Post (Separately) Posted: Thu Oct 24, 2013 14:39    Post subject: Reply with quote

всем спасибо за помощь!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Программное обеспечение All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group