Я видел ::GetDiskFreeSpace() ...Ex()
которая возвращает кажется корректное значение сейчас,
размера кластетра,
свободное пространство,...
почему они не подходят для своего вычисления
(я думал апи есть)
G>Или посмотри в сырцах-за-которые-обещали-надавать-по-шее-но-всем-пофиг CMountPoint::GetClusterSize() (файл MTPT)
А что это за сырцы ?
И почему по шее ?
Сообщите что за страшные и интересные истории, с разведчиками и фашистами были про это?
Здравствуйте, vgrigor, Вы писали:
V>Как узнать "размер файла на диске" ?
V>т.е.не логический размер — 2 байта, V>а сколько он вклюяая полный сектор займет ?
V>Есть такое апи ?
Щас мыслю скажу, а остальные коллеги подтвердят или опровергнут. Значит так: получаете размер кластера при помощи GetDiskFreeSpace. Получаете размер файла при помощи GetFileSize. Смотрите, во сколько кластеров влезает файл (арифметика). Причем если, например, размер кластера 2 байта и размер файла 3 байта, то он занимает на диске 2 кластера, т.е. 4 байта.
Мысль донес? Только сейчас проверил — файл размером 1 байт занимает на диске 8 Кб — целый кластер, зараза.
Flamer wrote: > Щас мыслю скажу, а остальные коллеги подтвердят или опровергнут. Значит так: получаете размер кластера при помощи GetDiskFreeSpace. Получаете размер файла при помощи GetFileSize. Смотрите, во сколько кластеров влезает файл (арифметика). Причем если, например, размер кластера 2 байта и размер файла 3 байта, то он занимает на диске 2 кластера, т.е. 4 байта.
Попробую внести поправку. Это все верно, если файл не сжат. Если же он
сжат, то на диске он занимает , может быть, намного меньше.
The GetCompressedFileSize function retrieves the actual number of bytes
of disk storage used to store a specified file.
Так что вместо GetFileSize надо использовать GetCompressedFileSize.
V>Как узнать "размер файла на диске" ?
V>т.е.не логический размер — 2 байта, V>а сколько он вклюяая полный сектор займет ?
V>Есть такое апи ?
V>Спасибо
делаем a = GetDiskFreeSpace — удаяем файл и опять b = GetDiskFreeSpace
b-a -> столько и занимал файл!
Здравствуйте, Othello, Вы писали:
V>>Как узнать "размер файла на диске" ?
V>>т.е.не логический размер — 2 байта, V>>а сколько он вклюяая полный сектор займет ?
V>>Есть такое апи ?
V>>Спасибо
O>делаем a = GetDiskFreeSpace — удаяем файл и опять b = GetDiskFreeSpace O>b-a -> столько и занимал файл!
упс... тупимс... a-b на самом деле
Здравствуйте, vgrigor, Вы писали:
V>Как узнать "размер файла на диске" ?
V>т.е.не логический размер — 2 байта, V>а сколько он вклюяая полный сектор займет ?
if ( IsNtfs() )
{
// можно поюзать FSCTL_QUERY_ALLOCATED_RANGESif ( IsCompressed() ) // use FSCTL_GET_COMPRESSION
.... // не помнюelse if ( FileSizeInBytes > 300 ) // примерно
{
SizeOnDisk = ((FileSizeInBytes + BytesPerCluster - 1)/BytesPerCluster)*BytesPerCluster;
}
}
else
{
SizeOnDisk = ((FileSizeInBytes + BytesPerCluster - 1)/BytesPerCluster)*BytesPerCluster;
}
Здравствуйте, Stanky, Вы писали:
>> файл займет место кратное кол-ву байт в кластере (для FAT32 — это 32 Кб). >> S>Поправочка: размер кластера в FAT'е зависит от размера раздела!!!
Хорошо: тогда создайте в FAT32 раздел на 40 Гб с размером кластера 4Кб.
Здравствуйте, vgrigor, Вы писали:
V>Файл может быть фрагментирован, V>и считать надо округляя не файл,а каждый фрагмент, V>т.е. столько сколько у файла фрагментов.
И где это такая интересная фрагментация, что все фрагменты файла меньше размера кластера?
Все, что здесь сказано, может и будет использоваться против меня...
> Хорошо: тогда создайте в FAT32 раздел на 40 Гб с размером кластера 4Кб. >
Проблема не понятна!!!
Максимальный размер раздела при таком размере кластера где-то 25ГБ!!!
Posted via RSDN NNTP Server 1.9 beta
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Re[2]: Как узнать "размер файла на диске" ?
От:
Аноним
Дата:
12.08.04 12:04
Оценка:
Здравствуйте, Othello, Вы писали:
V>>Как узнать "размер файла на диске" ?
V>>т.е.не логический размер — 2 байта, V>>а сколько он вклюяая полный сектор займет ?
O>делаем a = GetDiskFreeSpace — удаяем файл и опять b = GetDiskFreeSpace O>b-a -> столько и занимал файл!
Такой трюк не пройдет для маленьких файлов на NTFS, поскольку они целиком располагаются в MFT, то удаление этого файла не изменит FreeSpace.