2

Я испытывал следующий парадокс много раз, и я не понимаю, как это происходит.

Я открываю большой музыкальный / видео файл (скажем, 100 МБ), и когда он начинает воспроизводиться, я удаляю его (навсегда). Несмотря на это, медиаплеер сможет воспроизводить все это.
Я предполагаю, что это не буферизирует весь файл в начале, потому что

  • использование памяти процессом составляет всего 15 МБ
  • и это не то, что делают медиаплееры в любом случае.

Так как это происходит?

1 ответ1

6

Точные детали зависят от вашей системы, но основная идея заключается в том, что основная файловая система не будет вытаскивать коврик из-под открытого файла. Он удаляет его из любого места, где его можно увидеть, но на самом деле он не будет очищать блоки на диске (или какое-либо представление структур каталогов, указывающих на файл), пока вы не закроете его.

В Unix-системах это распространено: большинство файловых систем Unix не сдувают индекс, пока не будет закрыт последний открытый файловый дескриптор.

В Windows кажется, что если процесс открытия указывает 'FILE_SHARE_DELETE' на вызов CreateFile (что должна делать программа с хорошим поведением), то драйвер файловой системы обрабатывает удаление, но открытые файлы все равно могут получить к нему доступ. После закрытия последней открытой РУЧКИ для файла, файл очищается драйвером файловой системы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .