Другие языки программирования и технологии

Где хранятся данные, записываемые в файл?

Когда ведётся запись в новый файл, на протяжении всего процесса записи и до самого закрытия файла в проводнике можно наблюдать, что размер файла 0 байт, но данные ведь записываются, где же тогда они расположены, если не в этом самом файле?
Пока файл не закрыт, указатели на начало и конец файла на диске существуют в оперативной памяти. Кроме того данные чаше всего вначале записываются в ряд буферов (каждый размером с кластер 64 Кб по умолчанию, или другого размера, заданного программистом) . У каждого буфера свой указатель на конец записи в буфере. Буфера могут быть организованы в памяти ОЗУ или на винчестере
Когда буфер заполнится, он может быть переписан на диск и после этого указатель в буфере устанавливается в начало буфера, указатель конца файла на диске смещается на размер буфера.
Если следующий буфер заполнен, с ним происходит тоже самое. Информация о выполнении передается системе
Текущий размер файла изменяется скачкообразно и фиксироваться может в файловой системе (в зависимости от настроек системы) либо после каждого копирования буфера, либо в конце копирования всей цепочки буферов.
На длинном файле можно убедиться в этом, нажав в Проводнике Ctrl+R (Обновить окно Проводника) - записанный размер будет изменяться скачком, но изменяться не при каждом нажатии.
Записанный размер - означает, что длина файла зафиксирована в записи файла внутри папки, но процесс еще не закончен, пока в файл не сброшено содержимое последних буферов и файл не будет закрыт по команде CLOSE
Кроме того, информация в файловой системе пишется на её копию в памяти, и дублируется на диск только после безошибочного завершения этапа копирования, когда есть окончательная гарантия правильности.
Кирилл Никиров
Кирилл Никиров
70 042
Лучший ответ
Провёл эксперимент
for /l %i in (1,1,10000000) do @echo "fffffffffffffffffffffffffffffffffff">>ooo
Фокус установлен на записываемом файле (ооо). Индикация постоянного роста объёма
Viktor Vasilev
Viktor Vasilev
69 336
хм, Far вроде показывает адекватный растущий размер...
Файл открыт на запись. Если он и 0 байт, данные все равно на диске, просто на них еще нету ссылки.
Николай Жилин
Николай Жилин
18 381
Евгений Ефимов То есть, данные занимают определенные ячейки памяти на жестком диске, но к ним не привязана ссылка в виде этого файла?