"読み取り専用"は、ファイルのプロパティを開いた際の
ここのお話です。
VBAであれば、この辺で調べられますね。
Office TANAKA - FileSystemObject[Attributesプロパティ]
簡単に見つかると思ったのですが、見つからず・・・。
言葉のニュアンスの問題なのかもしれません。
結局、この様なものにしました。
#python import pathlib import stat def is_readonly(pathObj: pathlib.Path) -> bool: return (pathObj.stat().st_mode & stat.S_IWRITE) != stat.S_IWRITE if __name__ == '__main__': path = r'C:\temp\hoge.txt' pathObj: pathlib.Path = pathlib.Path(path) # 確認 print(f'ReadOnly : {is_readonly(pathObj)}') # 変更 mode = stat.S_IWRITE if is_readonly(pathObj) else ~stat.S_IWRITE pathObj.chmod(mode) # 確認 print(f'ReadOnly : {is_readonly(pathObj)}')
正直な所、”これで正解!!”と言う自信が無いです。
あぁ自分はpathlib派なので、pathlibを使います。
(便利だし標準ライブラリだし、何故皆が使わないのか理由が分からない)
pathObj.stat().st_mode
ここでモードを取得しているのですが、戻り値はintでした。
pathlib --- オブジェクト指向のファイルシステムパス — Python 3.11.3 ドキュメント
試している一般的なファイルの場合
読み取り専用ではない -> 33206 読み取り専用 -> 33060
でした。そのままの数値を使おうかとも思ったのですが、
それも違うような気がする匂いしかしません。
念の為、こちらを調べると
print(stat.S_IWRITE) #128
stat --- stat() の結果を解釈する — Python 3.11.3 ドキュメント
でした。
数値が合わないので、恐らくビット演算だろうとの予測で、
上のis_readonly関数を作ってみました。
今の所、これで大丈夫そうなのですが、正解を御存知の方
いらっしゃいましたら教えて頂けると助かります。
(当方Winでシンボリックリンク等も使用していない状態です)