Сможем ли мы когда-нибудь удалить открытый файл в Windows? - PullRequest
14 голосов
/ 08 июля 2010

Отказ от ответственности: я в основном Linux / веб-разработчик.

В Windows есть эта «приятная» функция, которая запрещает удаление любого файла, открытого любым процессом. Поэтому, если антивирус попадет не в тот файл в неподходящее время, какая-то случайная программа может работать некорректно и, возможно, завершиться сбоем.

Я прав? Есть ли планы исправить это?

Кто-нибудь из вас находит это приемлемым или, как это может показаться хорошей идеей в то время?

Edit:

На Unix он работает совсем по-другому, и так было на протяжении десятилетий.

Как пример:

  • процесс 1 открывает файл foo.txt для чтения или записи, или для обоих, не имеет значения
  • процесс 2 удаляет файл
  • файл не связан с файловой системой
  • процесс 1 продолжает чтение и / или запись, файл все еще существует, и он может увеличиваться, пока есть место на диске. Это просто недоступно для других процессов, которые еще не имеют дескриптора файла.
  • когда процесс 1 закрывает файл, он нигде не будет доступен

На самом деле, общая схема использования временных файлов в Unix: open-remove-read / write-close.

Ответы [ 2 ]

6 голосов
/ 20 марта 2012

Ваше первоначальное утверждение неверно. Windows разрешает удаление открытых файлов. Вам просто нужно указать FILE_SHARE_DELETE, и все готово. Внимательные программисты должны разумно решить, имеет ли смысл этот флаг (или делиться для чтения / записи) и передать его.

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

Windows, однако, запоминает текущий рабочий каталог любого процесса и предотвращает его удаление. Этот рабочий каталог не зависит от расположения любых файлов, открытых процессом.

0 голосов
/ 08 июля 2010

Это вполне приемлемо.Представьте себе ситуацию, когда вы читаете файл базы данных в вашем приложении, и какое-то другое приложение приходит и удаляет этот файл базы данных прямо из-под вас.Как ваше приложение узнает, что файл все еще существует?Как он будет гарантировать, что файловый поток не будет внезапно пытаться прочитать этот файл, может быть там одна миллисекунда, но не следующая?Вот почему программы могут блокировать файлы, чтобы гарантировать, что файл всегда будет там, пока программа не определит, что с ним все сделали.ситуация.Я почти уверен, что антивирусные программы осуществляют оптимистическую блокировку файлов, если только они не очищают их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...