Menu

#40 DELETE-FILE не удаляет r/o файлы

closed-rejected
nobody
src (38)
5
2008-01-08
2008-01-02
ygrek
No

Из 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.

- делать это в ядре или расширением?
- снимать атрибут только если удаление не удалось (с указанным кодом ошибки) или всегда?

Discussion

  • Andrey Cherezov

    Andrey Cherezov - 2008-01-03

    Logged In: YES
    user_id=132884
    Originator: NO

    А стандарт94 предписывает удалять любые файлы? Включая те, к которым доступ запрещен?

     
  • Nobody/Anonymous

    Logged In: NO

    Доступ то к ним не запрещён. У тех файлов к которым запрещён доступ - на уровне ACL убрано права на запись. А r/o флаг это какой-то анахронизм ДОСовский с непонятным предназначением..

    ~ygrek

     
  • Andrey Cherezov

    Andrey Cherezov - 2008-01-03

    Logged In: YES
    user_id=132884
    Originator: NO

    Это я к тому, что так потом может захотеться и права временно переключить (sudo,uac) для удаления :)

    Наверное флаг r/o ставят не для того чтобы его совсем уж игнорировали. Иногда это простой способ уберечь файл от удаления при выполнении групповых операций. Или способ пометки "нечего и пытаться" для реально r/o-файлов (CD/DVD, например).

     
  • Nobody/Anonymous

    Logged In: NO

    Право на запись как ни крути легально программно получить не удасться, если его нет. А r/o убрать легко. И полагаться на него как на защиту от удаления я бы не стал.
    Вообщем будет отдельная либа тогда :)

     
  • ruvim

    ruvim - 2008-01-07

    Logged In: YES
    user_id=258714
    Originator: NO

    Да, лучше отдельной либой и даже отдельным словом.
    DELETE-FILE-ALWAYS ( addr u -- ior ) — удалить файл независимо от его атрибутов (в том числе r/o).
    По идее, если после сброса атрибута удалить не удалось, атрибут следует восстановить.
    Ошибка может произойти и на этапе сброса атрибута, тогда подойдет тот же ERROR_ACCESS_DENIED.

     
  • ygrek

    ygrek - 2008-01-08
    • status: open --> closed-rejected
     
  • ygrek

    ygrek - 2008-01-08

    Logged In: YES
    user_id=1524915
    Originator: YES

    вообщем для своих нужд сделал в ~ygrek/lib/win/dir.f

     
MongoDB Logo MongoDB