Сейчас на форуме: (+5 невидимых) |
eXeL@B —› Программирование —› Размер папки (казалось бы простой вопрос) |
Посл.ответ | Сообщение |
|
Создано: 10 июля 2007 15:42 · Личное сообщение · #1 Всем привет... Возник вот какой вопрос: Как подсчитать физический размер папки на диске? Т.е. если у папки в Винде выбрать "Свойства", то будет подсчитан "Размер" и "На диске". С первым все ясно, сумма размеров всех файлов, а вот как подсчитать вторую величину??? В некоторых случаях она ОЧЕНЬ СИЛЬНО разнится с первой величиной. Заранее спасибо... |
|
Создано: 10 июля 2007 15:47 · Поправил: Smon · Личное сообщение · #2 NeoTall пишет: В некоторых случаях она ОЧЕНЬ СИЛЬНО разнится с первой величиной. Это связано с тем, что информация на диске располагается в кластерах, размер кластера влияет на размер файла на диске. К примеру если файл занимает 10 байт - он будет расположен в отдельном кластере (т.к. каждый файл начинается с нового кластера) и этот кластер будет помечен как занятый и в него ничего не будет дописываться, итого - размер - 10 байт, на диске - 4 кб в одном кластере, если к примеру возьмем 6 кб файл - то он будет занимать 4+2 кб в двух кластерах, итого на диске 8 кб (для 4 кб кластеров). Естественно то, что папка с большим кол-вом маленьких файлов зачастую занимает полуторократный размер на диске от своего реального. Чтобы узнать размер на диске нужно получить размеры кластера на диске и разделить размер каждого файла на размер кластера округляя до большего, затем умножаем полученное число на размер кластера и получаем размер папки\файла на диске. ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels |
|
Создано: 10 июля 2007 16:00 · Поправил: NeoTall · Личное сообщение · #3 Smon, причину-то разницы величин я знаю. Меня интересует как подсчитать. Хотя бы алгоритм по которому Винда считает, а если кто код подкинет, будет вообще сказка... Smon пишет: Соотвественно чтобы узнать размер на диске нужно получить размеры кластера на диске и разделить размер каждого файла на размер кластера округляя до большего. Может быть, хотя думаю, это не так. А если файл большой и фрагментирован, то уже твое предложение не "катит", надо будет у каждого фрагмент подсчитывать и округлять до большего. Ведь Винда не производит типа "Defrag Analyze" для подсчета размера папки на диске... И еще, а как же имена папок и файлов (в смысле, по идее чем они длиннее, тем больше занимают места), а папки ".." и ".", а если ФС не FATxx, а NTFS, какая будет разница в подсчетах??? |
|
Создано: 10 июля 2007 16:07 · Личное сообщение · #4 NeoTall, именно так. Недописанным может быть только один кластер - последний. Все остальные заполнены полностью. С NTFS всё интереснее - файлы размером меньше кластера могут храниться в MFT. Правда и в этом случае они будут занимать один кластер. Папки "." и ".." представлены только как записи файлов в родительской папке, а на диске им дополнительное место не выделяется. |
|
Создано: 10 июля 2007 16:16 · Личное сообщение · #5 ViSoR пишет: Недописанным может быть только один кластер - последний. Все остальные заполнены полностью. Уже сам понял... Т.е. для подсчета размера файла будет верен следующий код (для 4кБного кластера): if (FileSize mod 4096) <> 0 then
Но остается вопрос по поводу зависимости размера на диске от длины имени файла/папки... |
|
Создано: 10 июля 2007 16:28 · Личное сообщение · #6 |
|
Создано: 11 июля 2007 01:21 · Личное сообщение · #7 NeoTall пишет: Может быть, хотя думаю, это не так. А если файл большой и фрагментирован, то уже твое предложение не "катит", надо будет у каждого фрагмент подсчитывать и округлять до большего. Ведь Винда не производит типа "Defrag Analyze" для подсчета размера папки на диске... Фрагмент (кроме последнего) всегда занимает целое количество (полных) кластеров, так что это не проблема... файлы размером меньше кластера могут храниться в MFT. Правда и в этом случае они будут занимать один кластер. нет, не будут, т.к. выделение в $MFT Кроме этого не "меньше кластера", а меньше ~500байт, т.к. запись MFT ~1Кб. Плюс не забываем о фиче ntfs: альтернативные потоки.... |
|
Создано: 16 июля 2007 16:34 · Личное сообщение · #8 |
eXeL@B —› Программирование —› Размер папки (казалось бы простой вопрос) |