Из MSDN про DeleteFile :
If an application attempts to delete a file that does not exist, the DeleteFile function fails. If the file is a read-only file, the function fails with ERROR_ACCESS_DENIED. To delete a read-only file, you must first remove the read-only attribute.
- делать это в ядре или расширением?
- снимать атрибут только если удаление не удалось (с указанным кодом ошибки) или всегда?
Logged In: YES
user_id=132884
Originator: NO
А стандарт94 предписывает удалять любые файлы? Включая те, к которым доступ запрещен?
Logged In: NO
Доступ то к ним не запрещён. У тех файлов к которым запрещён доступ - на уровне ACL убрано права на запись. А r/o флаг это какой-то анахронизм ДОСовский с непонятным предназначением..
~ygrek
Logged In: YES
user_id=132884
Originator: NO
Это я к тому, что так потом может захотеться и права временно переключить (sudo,uac) для удаления :)
Наверное флаг r/o ставят не для того чтобы его совсем уж игнорировали. Иногда это простой способ уберечь файл от удаления при выполнении групповых операций. Или способ пометки "нечего и пытаться" для реально r/o-файлов (CD/DVD, например).
Logged In: NO
Право на запись как ни крути легально программно получить не удасться, если его нет. А r/o убрать легко. И полагаться на него как на защиту от удаления я бы не стал.
Вообщем будет отдельная либа тогда :)
Logged In: YES
user_id=258714
Originator: NO
Да, лучше отдельной либой и даже отдельным словом.
DELETE-FILE-ALWAYS ( addr u -- ior ) — удалить файл независимо от его атрибутов (в том числе r/o).
По идее, если после сброса атрибута удалить не удалось, атрибут следует восстановить.
Ошибка может произойти и на этапе сброса атрибута, тогда подойдет тот же ERROR_ACCESS_DENIED.
Logged In: YES
user_id=1524915
Originator: YES
вообщем для своих нужд сделал в ~ygrek/lib/win/dir.f