psilogic: (Default)
psilogic ([personal profile] psilogic) wrote2009-08-22 06:28 pm

Чудеса виндоуз...

Можно создать на виндах (XP, NTFS) большой файл на 5 Гигов, заполненный нулями, и притом быстро?

Если заполнять все 5 Гб выровненными блоками по 4 Кб, то у меня это занимает где-то 100 секунд. Плохо. Изменение размера блока не влияет. Функция chsize работает примерно столько же, но нет возможности показать пользователю "прогресс".

Но есть забавный способ. Надо открыть файл, сделать "fseek" на 5 Гб вперед, записать туда один нулевой байт (fwrite) и сказать fclose. Через секунду файл на 5 Гб готов.

Но рано радоваццо. Стоит попытаться записать в конец этого файла один-единственный ненулевой байт, сказать flush и... все виснет на те же 2 минуты без всяких шансов на показ "прогресса". Чудес не бывает, увы :(

[identity profile] fregimus.livejournal.com 2009-08-22 02:44 pm (UTC)(link)
Посмотрите NTFS sparse files (http://www.flexhex.com/docs/articles/sparse-files.phtml). Кажется, это то, что Вам надо.
wizzard: (Default)

[personal profile] wizzard 2009-08-22 07:47 pm (UTC)(link)
да вроде есть какой-то не то апи не то ioctl в худшем случае, чтоб нулями позабивать. и спарсе файлы тоже из той оперы, да.

[identity profile] morfizm.livejournal.com 2009-08-22 10:23 pm (UTC)(link)
Будьте осторожны, на Win98 & Win95 fseek на конец + записать нулевой байт создаст не файл, заполненный нулями, а файл, заполненный junk'ом, который был на винче в этот момент.

[identity profile] lomka.livejournal.com 2009-08-24 06:34 pm (UTC)(link)
Доживём до 5-гигабайтных регистров - и будет Вам чудо ).