Как узнать размер свободного места на диске в DOS?
Использую DOS 7.1; FAT32; компиляторы Borland C++3.1, OpenWatcom.
getdfree() пробовали ? если не поможет , то структуру fat прочитать и разобрать не так уж сложно . )
см. INT 21 / AX = 7303h
не интересовался этим, но DOS Navigator точно показывает емкость больших дисков как 2Гб
Да, вы правы, NC и DN не могут определить больше 2 Гб. Но команда DIR показывает правильное значение. Значит можно как-то эту информацию получить...
А что такое 7303h? Разве у 21 прерывания есть функция с таким номером? Если да, то куда возвращается результат?
Последняя версия DOS - 6.22. Версии 7.1 в природе не существует, так представляется Win 9x для запущенных из нее DOS-программ.
Писать DOS компилятор, который мог бы генерить программы, работающие лишь в DOS-сессии Windows, абсурдно. Поэтому в стандартных библиотеках DOS компиляторов отсутствуют функции, не поддерживаемые DOS.
Хотите большего, следуйте следующему алгоритму:
1. Проверка версии DOS.
2. Если 6.22 и ниже - воспользоваться функцией _dos_getdiskfree.
3. Если версия 7.0 и выше - воспользоваться уникальными функциями DOS-сессии Windows для работы с FAT32 через прерывания.
Никакого Windows'а, чистый ДОС. (
Цитата:
ROM-DOS BUILD Utility - ROM-DOS BUILD utility enables developers to include or exclude a variety of features such as Kernel options, device drivers, FAT32 & Long File Name support and other ROM-DOS capabilities.
Так что берем SDK...
Цитата: Gvaler
Никакого Windows'а, чистый ДОС. (http://www.datalight.com/products/romdos/)
Простите за нескромный вопрос: а зачем этому DOS нужен диск размером больше 2 Гб?
hint: для 2 Гб диска таблицы FAT занимают 128 Кбайт, а FAT32 - 2 Мбайт, что делает абсолютно нереальным хранение в ОЗУ хоть небольшой части FAT. А если каждый раз считывать с диска, то скорость чтения файла уменьшится в сотни раз. Ориентировочно, скорость при чтении составит около 0.1 Мб/с, а записи - и того меньше.
Цитата: andriano
Простите за нескромный вопрос: а зачем этому DOS нужен диск размером больше 2 Гб?
Дык для записи и хранения большого объема данных, с которыми должна работать программа.
В частности, те самые 2 Гб будут писаться более 8 часов. Не лучше ли для задачи, работающей с большими объемами данных, использовать ОС, которая вместо 8 часов может сделать ту же самую работу менее чем за 1 минуту?