Estou tentando criar um arquivo oculto no Windows usando Python, mas depois de ocultá-lo, fica impossível escrever. No entanto, ler este arquivo é possível.
import ctypes
with open("test.txt", "r") as f: print('test')
ctypes.windll.kernel32.SetFileAttributesW("test.txt", 0x02) # adding h (hidden) attribute to a file
with open("test.txt", "r") as f: print('test') # works
with open("test.txt", "w") as f: print('test') # error
Erro:
Traceback (most recent call last):
File "C:\Users\user\Documents\client\test.py", line 8, in <module>
with open("test.txt", "w") as f: print('test') # error
PermissionError: [Errno 13] Permission denied: 'test.txt'
Usar 0x22
(que é a
atributo e h
atributo) em vez de 0x02
não ajuda. O mesmo erro ocorre. Depois de tornar o arquivo visível novamente via , attrib -H test.txt
torna-se possível abri-lo em modo de gravação. No entanto, até onde eu sei, arquivos ocultos devem ser graváveis no Windows.
SO: Windows 11
Versão do Python: Python 3.10.2
ATUALIZAÇÃO : Encontrou um problema, parece que ele pode causar o erro que você descreveu youtrack.jetbrains.com/issue/RSRP-287503
Tente
|
combinar atributos em vez de reescrevê-losNão vi documentação específica do Python sobre esse comportamento, mas acredito que seja porque, no nível de implementação,
'w'
finally está chamando a API do WindowsCreateFileW
, que tem esta observação:A abertura para escrita
mode='w'
eventualmente usaria CREATE_ALWAYS com FILE_ATTRIBUTE_NORMAL e retornaria acesso negado; enquanto a abertura para leitura e atualizaçãomode='r+'
ou anexaçãomode='a'
funcionaria porque OPEN_EXISTING seria usado.Demonstrado abaixo com Python:
Saída:
O prompt de comando funciona da mesma maneira: