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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить размер кластера? 
:(
    Опции темы
GSV4
Дата 17.8.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Народ!
Кто-нибудь в курсе, как на Delphi определить размер кластера конкретного диска?

PM MAIL   Вверх
Yanis
Дата 17.8.2006, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



http://forum.vingrad.ru/index.php?showtopi...st&p=260327
В этом модуле есть функция DF_GetClusterSize.

Добавлено @ 13:03 
А вообще это делается так:
Код
function GetClusterSize (const Drive : string) : Cardinal;
var
  SectorSize, ClusterSize, Tmp : DWORD;
begin
  Result := 0;
  if GetDiskFreeSpace(PChar(Drive), SectorSize, ClusterSize, Tmp, Tmp) then
    Result := SectorSize * ClusterSize;
end;



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


Новичок



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

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



Цитата

  if GetDiskFreeSpace(PChar(Drive), SectorSize, ClusterSize, Tmp, Tmp) then
    Result := SectorSize * ClusterSize;

В том-то и дело, что функция GetDiskFreeSpace дает неправильные размеры. Я ее пробовал вызывать на двух разных винчестерах (на обоих FAT32, Windows 98 SE):
Seagate Barracuda 80 Гб (диски 24 Гб + 51 Гб);
Maxtor 160 Гб (20 + 30 + 30 + 40 Гб).
Она мне везде дает:
SectorSize = 64, ClusterSize = 512, что в итоге дает 32 768 байт. Тогда как на самом деле на некоторых дисках размер кластера у меня = 16 384 (это FAR так показывает; да и экспериментально это подтверждается). 
Попробуй сам вызвать эту функцию. Думаю, что и у тебя будет то же самое.

PM MAIL   Вверх
Yanis
Дата 18.8.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



GSV4
А ты ремарки к функциям читаешь?


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


sceloglauxalbifacies
****


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

Репутация: 7
Всего: 158



хм. странно что нет на виду нормальной функции для вычисления этих параметров. user posted image
нашел вот такое зло.
PM MAIL   Вверх
GSV4
Дата 22.8.2006, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

А ты ремарки к функциям читаешь? 

Читаю. Какую именно ты имеешь в виду?

PM MAIL   Вверх
GSV4
Дата 22.8.2006, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



To dumb:
Спасибо за "зло"!

PM MAIL   Вверх
Yanis
Дата 22.8.2006, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



GSV4
Цитата
Windows Me/98/95: For volumes that are greater than 2 GB, the GetDiskFreeSpace function may return misleading values. The function caps the values that are stored into *lpNumberOfFreeClusters and *lpTotalNumberOfClusters so as to never report volume sizes that are greater than 2 GB. On volumes that are less than 2 GB and that have more than 64 actual sectors per cluster, *lpSectorsPerCluster will be capped at 64 and the values that are stored into *lpSectorsPerCluster, *lpNumberOfFreeClusters, and *lpTotalNumberOfClusters will be incorrect. That is because the operating system adjusts the values so that computations with them yield the correct volume size with the capped *lpSectorsPerCluster.



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


Новичок



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

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



To Yanis:
А где ты ее взял? Лично я читаю файл "C:\Program Files\Common Files\Borland Shared\MSHelp\WIN32.HLP" от 22.05.2001. Там ничего про Windows 98 не сказано.
Это первое. А коли ты знал, что функция GetDiskFreeSpace глючная, зачем же тогда ее привел?

PM MAIL   Вверх
Yanis
Дата 22.8.2006, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(GSV4 @  22.8.2006,  10:40 Найти цитируемый пост)
To Yanis:
А где ты ее взял? Лично я читаю файл "C:\Program Files\Common Files\Borland Shared\MSHelp\WIN32.HLP" от 22.05.2001. Там ничего про Windows 98 не сказано.

http://msdn.microsoft.com/library/default....skfreespace.asp

Цитата(GSV4 @  22.8.2006,  10:40 Найти цитируемый пост)
А коли ты знал, что функция GetDiskFreeSpace глючная, зачем же тогда ее привел?

А где было написано, что ты пишешь под антиквариат?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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