Конференция "WinAPI" » Узнать сколько места на диске занимает файл [D7, WinXP]
 
  • Apachi (01.10.09 10:05) [0]
    Уважаемые мастера
    Подскажите пожалуста как узнать по имени файла, сколько он занимает места на диске??? Как правило это значение немного превышает размер файла.
    Помогите пожалуста!
  • QAZ (01.10.09 10:39) [1]
    if рамер файла mod размер кластера >0 then
    (рамер файла div размер кластера +1)*размер кластера else
    (рамер файла div размер кластера)*размер кластера;

    както так
  • Apachi (01.10.09 10:43) [2]
    осталось только узнать определение размера кластера :)
    ща покапаем
    спасибо
  • brother © (01.10.09 11:08) [3]
    я боюсь огорчить...) не все так просто: а если файл фрагментирован?
  • DrPass © (01.10.09 11:13) [4]

    > brother ©   (01.10.09 11:08) [3]
    > я боюсь огорчить...) не все так просто: а если файл фрагментирован?
    >

    А разве в этом случае количество недозаполненных кластеров становится больше одного?
  • QAZ (01.10.09 11:50) [5]

    > я боюсь огорчить

    бойся


    > осталось только узнать определение размера кластера

    функция GetDiskFreeSpace
    и знание того что 512байт в секторе
  • QAZ (01.10.09 12:00) [6]
    точней в GetDiskFreeSpace можно и размер сектора узнать если чо...
  • QAZ (01.10.09 12:18) [7]
    ищо нюанс
    чтоб узнать размер сжатого в NTFS файла надо юзать соотв. функции
    так как обычные будут выдавать разжатый размер
  • QAZ (01.10.09 12:21) [8]
    а по поводу фрагментации и прочего бреда не парься...
    минимальная неделимая еденица хранения информации:
    в файловой системе - кластер,
    для "голого" диска - сектор
  • Riply © (02.10.09 06:04) [9]
    Для получения "выделенного" под файл места (без учета потоков),
    можно попробовать использовать ZwQueryInformationFile(..., FileStandardInformation)
    В структуре FILE_STANDARD_INFORMATION обратить внимание на поле AllocationSize.
    Дело в том, что для файла, например размером 4КБ,
    может быть выделено как 2КБ (компрессированный), так и 57564 КБ
    Вообщем, как выпендриваемся при его создании, такой результат и получаем :)
  • 1024байт (02.10.09 22:03) [10]

    > и знание того что 512байт в секторе

    что за знание?
  • Германн © (03.10.09 02:37) [11]

    > Riply ©   (02.10.09 06:04) [9]

    О! Саша нашла время, свободное от модерирования форума "исходников", и вернулась к нам. Это - плюс! И нам и ей!
    Это что-то среднее между Розычем и Ромкиным.
    :)
  • Riply © (03.10.09 03:15) [12]
    > [10] 1024байт   (02.10.09 22:03)
    > что за знание?

    Угу. В секторе может быть и 4096 КВ. Видела своими глазами :)

    > [11] Германн ©   (03.10.09 02:37)
    > О! Саша нашла время, свободное от модерирования форума "исходников", и вернулась к нам.

    Дык я и не уходила, ибо от Мастеров не уйдешь :)
  • QAZ (03.10.09 09:57) [13]
    Размер сектора традиционноравен 512 байт.В 2006  IDEMA объявила о переходе на размер сектора 4096 байт который планируется завершить к 2010

    по поводу определения размера сектора написано постом ниже
  • 1024байт (03.10.09 11:14) [14]
    так чего же стОит твоё "знание того что 512байт в секторе", если всем заинтересованным известно, что это не так?
    в общем поменьше самоуверенности
  • Denis__ © (03.10.09 22:27) [15]

    > Угу. В секторе может быть и 4096 КВ.


    наверное все же байт?=)
  • Riply © (03.10.09 23:43) [16]
    > [15] Denis__ ©   (03.10.09 22:27)
    > наверное все же байт?=)

    Угу. Опечатка. Sorry.
 
Конференция "WinAPI" » Узнать сколько места на диске занимает файл [D7, WinXP]
Есть новые Нет новых   [134434   +26][b:0][p:0.001]