![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
Гость_Peter |
|
|||
Unregistered |
Как узнать количество свободного места на HDD? Функция GetDiskFreeSpace - врет. А в GetDiskFreeSpaceEX результат в PLargeInteger.Что это такое и как его например вывести в edit. Или есть чего попроще.
|
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
|
|||
|
||||
MIX55 |
|
|||
![]() много работы ![]() Профиль Группа: Awaiting Authorisation Сообщений: 208 Регистрация: 23.10.2005 Где: Здесь Репутация: нет Всего: 4 |
держи раз:http://www.torry.ru/vcl/filedrv/driveinformation/CDiskInfo.zip
держи два:http://www.carbonsoft.com/download/cxdrive1_r1005.zip два компонента внутри примеры разобраться пара пустяков --------------------
Hарод, а как в дельфи писать паскалевские проги....?*********************************************Жизнь слишком коротка, чтобы писать на Assembler'e |
|||
|
||||
Guest |
|
||||
Unregistered |
Спасибо за ответы! Но вот это работает, если размер диска гдето 2 ГБайта ,если больше на операции вывода возникает ошибка. |
||||
|
|||||
Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Под Win95. Под NT - 4Gb ![]() Вот. Набросал на скорую руку.
Добавлено @ 22:41 P.S. под Win95 все равно возвращать будет только до 2Гб. (хотя, win95 вроде больше и не держит) Delphi сама определит, под какой системой программа запущена. |
||||
|
|||||
Guest |
|
|||
Unregistered |
Спасибо , сейчас попробую. Но оказывается есть совсем простое решение (откопал в компонентах по выше приведенным ссылкам) - две функции из модуля SysUtils:
function DiskSize(Drive: Byte): Int64; - размер всего диска. function DiskFree(Drive: Byte): Int64; - размер свободного места на диске. где Drive номер диска: A=1,B=2,C=3,... Функции возвращают -1 если диска не существует. И результат вывести без проблем - Edit1.text:=inttostr(DiskSize(3)); |
|||
|
||||
Guest |
|
|||
Unregistered |
Попробовал. Параметры диска 15 ГБайт определяет корректно.
|
|||
|
||||
Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Ну вообще логично. То же самое, только своего писать не нужно. Вот код этих функций:
По сути то же самое, только не с выделением памяти, а с массивом. |
||||
|
|||||
Guest |
|
|||
Unregistered |
И надо учесть что все так легко получилось поскольку использовалась не API ф-цыя GetDiskFreeSpaceEx где все параметры PLargeInteger, а ее аналог из модуля SysUtils где два параметра int64.
|
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
LargeInteger - это только для 9x систем. В NT возвращает именно то, что нужно. И используется не ее аналог, а указатель на данную функцию. Просто дельфи подменяет этот указатель,в зависимости от того, под какой операционкой работает программа. Это справедливо и для варианта, который я предложил, т.к. в нем используется все та же функция с подменой, а не прямое обращение к WinAPI. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |