TheMaxai
@TheMaxai

Как открыть скрытый файл (Windows)?

пытаюсь прочитать но выдает ошибку: "PermissionError: [Errno 13]"
пытался запустить скрипт от имени администратора, но не прокатило
скрыл файл методом - "subprocess.call(['attrib', '+h', filename])"
  • Вопрос задан
  • 188 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Проблема в том, как Python использует соответствующее WinAPI для работы с файлами. При вызове open() с режимом w вызывается CreateFile с параметром dwDesiredAccess равным GENERIC_WRITE и параметром dwCreationDisposition равным CREATE_ALWAYS. Вот что написано в документации по поводу сочетания этих параметров при открытии файла с атрибутом "скрытый":

If CREATE_ALWAYS and FILE_ATTRIBUTE_NORMAL are specified, CreateFile fails and sets the last error to ERROR_ACCESS_DENIED if the file exists and has the FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM attribute. To avoid the error, specify the same attributes as the existing file.

Если на русском и кратко, то WinAPI-функция CreateFile вернёт ошибку ERROR_ACCESS_DENIED. А python-функция open() выбросит соответствующее исключение.

Нормального решения этой проблемы не существует. Обходным решением может быть использование режима r+:
with open('test.txt', 'r+') as fh:
    fh.truncate()
    fh.write('test')
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Sovetnikov
технический директор pulsprodaj.ru
Речь видимо идёт о Windows.
Атрибут Hidden по своей сути не влияет на доступ к файлу, так что проблема именно в доступах к файлу, попробуйте type из тойже администраторской консоли из которой запускаете скрипт Python.

Хотя консольные тулзы иногда "уважают" Hidden и не дают изменять файл, но читать дают:
Q:\Temp>echo 111 > a.txt
Q:\Temp>type a.txt
111
Q:\Temp>attrib +h a.txt
Q:\Temp>type a.txt
111
Q:\Temp>echo 111 > a.txt
Access is denied.
Q:\Temp>attrib -h a.txt
Q:\Temp>echo 111 > a.txt
Q:\Temp>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы