Я новичок в работе с файловой системой Windows, и я застрял на этой проблеме в течение нескольких дней. Я кодирую C#, и я хочу получить точный «размер на диске» каталога, например, отображаемый в диалоговом окне «Свойства» каталогов в Windows 7.Как получить точный размер каталога на диске
Теперь я могу получить грубую фигуру, перемещаясь через каждый файл и каждый подкаталог в каталоге, используя API GetCompressedFileSize
в kernel32.dll
для сжатых файлов и свойство FileInfo.Length
, округленное до кратного размера кластера для обычных файлов.
Я обнаружил, что некоторые файлы разделяют кластеры (?) (Размер на диске не кратен размеру кластера), в то время как другие занимают кластеры отдельно, тогда я не могу получить точный размер на диске, будь то округлять размер до кратное размеру кластера или нет.
Существуют также символические ссылки, которые не занимают дисковое пространство, и я не могу найти способ отличить их от обычных каталогов. Размер, который я получаю, намного больше, чем точный размер, поскольку я не могу избежать вычисления размеров этих ссылок.
Я предполагаю, что для получения точного размера файла или каталога на диске должен быть API или что-то еще. Так что это? Или есть более простой/быстрый способ сделать это? Спасибо за помощь!
** не реальный ответ ** , но это может быть ... http://stackoverflow.com/questions/3750590/get-size-of-file-on-disk?rq=1 – RadioSpace
" Размер на диске "не является четко определенной концепцией, особенно в NTFS, где файл может содержать ненулевые данные, но по-прежнему занимать нулевые кластеры. Проводник использует очень наивное определение. –
Проводник даже не пытается выполнить то, что вы просите –