Windowsでdoesn’t allow reading and writingと怒られた際の姑息な解決手段【開発備忘録】
経緯
WindowsのVSCode上でFlutterアプリの開発を進めていました。
ある日、いつもどおりデバッグをしようとしたら、デバッグコンソールに以下のようなエラーメッセージがでました。
(前略)
Error: The 'arb-dir' directory, 'LocalDirectory: '<MY PROJECT PATH>\lib\l10n'', doesn't allow reading and writing.
Please ensure that the user has read and write permissions.
エラーメッセージを要約すると、「Flutterのlib/l10nディレクトリが読み取り専用だから書き込み許可してね」ということです。
多言語対応のために作っただけのディレクトリなのに、なぜ。。。?
試したこと(解決せず)
- Windowsセキュリティの設定を確認
- クラウドの同期を停止
- エクスプローラーから「読み取り専用」を解除
- 管理者としてデバッグを実行
姑息な手段(解決)
いろいろと調べてあらゆる対処法を試しましたが、どうにも解決に至りませんでした。
そこで、GitHub Copilotに一時しのぎの手法を教えてもらいましたので、それを紹介します(普通に使えます)。
以下のコマンドをターミナル(管理者)から実行します。
# 管理者として実行してください
param(
[string]$ProblemPath = "<エラーとなっているディレクトリのパス>"
)
$full = Resolve-Path $ProblemPath -ErrorAction Stop
Write-Host "対象: $full"
# 所有権を取得
write-host "→ 所有権を取得しています..."
cmd /c "takeown /F `"$full`" /R /D Y"
# フルコントロールを付与
write-host "→ アクセス権を付与しています..."
cmd /c "icacls `"$full`" /grant `"$env:USERNAME`":F /T"
# 読み取り専用属性を外す
write-host "→ 読み取り専用属性を外しています..."
cmd /c "attrib -R `"$full`" /S /D"
これを実行すれば、しばらくの間は書き込みできるようになって、エラーが出なくなります。
根本的な原因はなにか?
私が調べた限りでは、私の症状は原因不明としか言いようがありません。
根本的な原因や解決策がわかる方がいたら教えていただきたいものです。