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