Как удалить файл точно под Windows (проблема с блокировкой файлов)? - PullRequest
1 голос
/ 11 марта 2011

есть ли способ удалить файл в файловой системе windows xp, ntfs, даже если этот файл заблокирован?

Проблемы с другими процессами, такими как, например, антивирусное сканирование блокирует файлы, которые я хочу переместить / удалить.

Спасибо за любые подсказки!

Ответы [ 4 ]

4 голосов
/ 11 марта 2011

MoveFileEx позволяет вам передать MOVEFILE_DELAY_UNTIL_REBOOT, что приведет к перемещению / удалению файла при следующей перезагрузке. Кроме этого, вам придется найти / убить любой другой процесс (ы), у которого в данный момент заблокирован файл, что может быть невозможно, и это почти наверняка нежелательно для большинства программ.

2 голосов
/ 11 марта 2011

Если файл заблокирован, когда вы пытаетесь удалить его, удаление не удастся.Если вам нужно удалить файл, тогда вам нужно все, что его блокирует, чтобы снять блокировку.

Вот и все, что нужно сделать.Здесь нет ярлыков.

1 голос
/ 11 марта 2011

Если я правильно помню, есть программа Microsoft под названием Open Handles, которую вы можете скачать, которая расскажет вам, какой процесс блокирует определенный файл.Затем вы просто убиваете этот процесс, и он разблокирует файл, чтобы вы могли удалить его.Не работает, если файл заблокирован процессом основной операционной системы, но должен работать нормально, если он заблокирован антивирусным сканером.

Я думаю, если вы пытаетесь сделать это программно, а не вручную, выВам нужно будет заставить вашу программу вызывать oh.exe и обрабатывать ее вывод соответствующим образом.Затем завершите соответствующий процесс с помощью Windows API (насколько мне известно, TerminateProcess - подходящая функция) и попробуйте снова удалить файл.

0 голосов
/ 11 марта 2011

Если вам абсолютно необходимо удалить файл перед продолжением, вы можете сделать следующее:

#include <stdio.h>
...
while(remove("myfile.txt" ) != 0)
   // Error deleting file. Wait a little before trying again.
   Sleep(100);

После цикла вы абсолютно уверены, что файл успешно удален.
Вы можете использовать некоторые "счетчик попыток"«чтобы выйти из цикла, чтобы не ждать вечно;)

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