Ограничение размера файла на FAT32
Как раз 4Gb
цифра 32 в слове FAT32 ни о чем не говорит?
32 в названии FAT32 говорит лишь об ограничении на количество кластеров (32 бита, т.е. 2^32 кластера). Например на дискетках применяется FAT12, т.е. кластеров там может быть не более 2^12 = 4096 кластеров, а значит каждый элемент FAT (File Allocation Table) имеет размер 12 бит, а в FAT32 соответственно 32 бита.
В DOS'е (FAT16) ограничение на размер файла было 2^32 байт (в RootDirectory полю, отвечающему за размер файла, выделено 4 байта, т.е. 32 бита). Можно предположить, что это же ограничение осталось в FAT16 под виндой и, возможно, в FAT32.
В FAT16 максимальный размер файла 2^31=2Gb.
Внутренняя адресация FAT - 64 бита. Поэтому файлы больше 4 Гб вполне спокойно жили у меня на винте
Почему же 2^31 ? Хочешь сказать там ещё знаковый бит?
Может объяснишь, что подразумевается под "внутренней адресацией FAT"? Я не очень это понимаю...
Хз. Просто так есть.
Хрен знает, где-то увидел... ща пытаюсь выяснить не спутал ли я 2 гига и 4 гига - не помню про какое ограничение на ФАТ-32 писали раньше. Больше двух гигов исошник был точно, а вот был ли ещё один 3.7 гига или 4.7 гига - не помню . Так что походу я фигню сморозил, но проверить интересно. Если есть где образец такого файла - подскажите плз.
2^32 - 1 bytes RTFM UMFB
чуве, бери кулькулятор и считай
Я вот знаю, что под DOS'ом элемент RootDirectory представляется как следующая структура:
struct _dir_type {
char[8] name;
char[3] ext;
char attr;
char[10] reserv; // добавка до размера структуры 32 байта
unsigned int16 time, date, firstC; // насчёт типа не уверен, но под каждое поле- 2 байта
unsigned int32 size;
}
В расширении FAT резерв используется для увеличения длины имени файла (там ещё хитрее устроено, поскольку для одного файла может быть выделено более одного элемента RootDirectory, что позволяет поддерживать и DOS).
Вообще о структуре диска я узнал из книжки Фаронова по паскалю, а там поля time, date, firstC имеют тип Word (целочисленный беззнаковый, 2 байта а size - LongInt (целочисленный со знаком, 4 бата- целочисленного беззнакового, 4 байта там нет! поэтому я точно сказать не могу, но логично предположить и это скорее всего, что знакового бита там нет!
Сейчас у меня нет под рукой источника, в котором описывается данная структура на С и притом для FAT16 под винду (расширенный FAT но я обязательно посмотрю!
Кстати что такое UMFB?
Про RTFM я знаю...
люди, вы вообще о чем?
Под рукой у меня мануала нету, но в инете на любом сайте написано.
Ща в инете порылся - точно 4 гига. облом.
Я посмотрел в одной проге (LFN- long file name, которая может делать многие вещи с FAT32, FAT 16, FAT12, а также читать CD с файловой системой ISO либо Joliet- мощная прога- своими силами- она написана под DOS)- насколько смог понять, даже в FAT32 используется 4 байта под размер файла.
struct longdirentry {
char[8] name;
char[3] ext;
char[8] reserv;
word high_cluster; // старшее слово first_cluster в FAT32
word time;
word date;
word first_cluster; // номер первого кластера
dword length; // размер файла!
}
Ну вот такая вот структура элемента RootDirectory
размер кластера у вас какой?
А кто нибуть знает о таких же огранченияз на ext2?
Ща в инете порылся - точно 4 гига. облом.Проще в сырцы fastfat'а залезть
INLINE
BOOLEAN
FatIsIoRangeValid (
IN PVCB Vcb,
IN LARGE_INTEGER Start,
IN ULONG Length
)
/*++
Routine Description:
This routine enforces the restriction that object space must be
representable in 32 bits.
Arguments:
Vcb - the volume the range is on
Start - starting byte (zero based) of the range
Length - size of the range
Return Value:
BOOLEAN - if, considering the cluster size, the neccesary size of
the object to contain the range can be represented in 32 bits.
--*/
{
//
// The only restriction on a FAT object is that the filesize must
// fit in 32bits, i.e. <= 0xffffffff. This then implies that the
// range of valid byte offsets is [0, fffffffe].
//
// Two phases which check for illegality
//
// - if the high 32bits are nonzero
// - if the length would cause a 32bit overflow
//
return !(Start.HighPart ||
Start.LowPart + Length < Start.LowPart);
}
А що це такэ? Я в mount_msdosfs полез, да там вообще тухло
Оставить комментарий
Gasparfx
Есть ли какое? Пытаюсь скачать DVD образ размером 4.5Гб, при закачке 90% говорит, что диск полный, хотя место ещё есть...