Я пишу настольное приложение под Windows в C++ MFC.Как удалить файл, который заблокирован?
Приложение создает индексный файл и записывает информацию снова и снова.
Если приложение выходит из строя, при следующем запуске приложения он удалит разбитый индексный файл и создаст новый. Я думаю, что в некоторых случаях индексный файл будет заблокирован. Это будет катастрофой, если я не могу удалить заблокированный файл индекса.
Как я могу гарантировать, что могу удалить файл и создать новый? Я могу убедиться, что ни одно другое приложение не откроет индексный файл. Его нельзя удалить только из-за сбоя приложения.
Может ли кто-нибудь помочь?
Не совсем верно, что если процесс не открыт, то он не заблокирован. В нескольких нечетных случаях Windows не может потерять блокировку. Это очень редкий вопрос, но я видел, как это случалось несколько раз, даже когда-то под Win 7. Однако не было разработано, как его воссоздать.Однако, похоже, это случается только при авариях. – Goz
Когда произойдет синий экран, эта блокировка может произойти – user25749
Я был бы очень удивлен, если вы обнаружите ошибку, когда блокировка выживает при закрытии и завершении процесса. Если вы это сделаете, это основная ошибка в операционной системе. Чтобы сделать это утверждение, вам нужно исключить ошибку в коде. Может ли ручка сохраниться в другом процессе? Неужели процесс действительно умер, или отладчик сохраняет его в живых? Что означает «авария» в этом контексте? Учитывая, что вы не можете воспроизвести его, я очень скептически отношусь к утверждению, что это ошибка операционной системы. – janm