Переключиться на Linux scnr
Хорошо, теперь серьезно: это недостаток операционной системы Windows, который не может быть обойден. Каждая программа, открывающая файл, должна согласовывать другие программы, имеющие файл, открытый одновременно. Это была проблема, с которой я столкнулся много лет назад, когда все еще использовал Windows. Недостаточно открыть файл и сказать: пусть кто-нибудь еще тоже откроет это. Другие также должны сказать, что откройте этот файл, даже если он уже открыт.
В Linux, напротив, операционная система не допускает блокировку файлов, как это делает Windows. Здесь, если какой-либо файл используется более чем одной программой одновременно, сами программы должны убедиться, что одновременный доступ заблокирован. Кроме того, в Linux мы можем просто создать файл, убедиться, что другой процесс был запущен и открыть файл, а затем просто удалить файл (пока он открыт). Затем имя файла немедленно удаляется из файловой системы, но файл все еще поддерживается драйвером файловой системы до тех пор, пока не будет удалена последняя ссылка (включая дескрипторы открытого файла).
Возвращаясь к вашей проблеме: поскольку все это не работает в Windows, вы можете использовать два других подхода:
- Зарегистрируйте файл, который будет удален при следующей загрузке (в дни Win3x в win.ini был раздел для этого. Более новая версия Windows все еще поддерживает это, я просто больше не могу вспомнить, как это делается сейчас ).
- Запустите другой процесс, подождите, пока он откроет файл, закройте файл и затем пытайтесь каждую минуту удалять файл, пока удаление не будет успешным ...
С уважением, Бодо