removeDirectoryRecursive
Windowsで使用すると、「removeDirectoryRecursive:permissiondenied」というメッセージとともにIOException
タイプのPermissionDenied
がスローされます。ディレクトリを削除するために必要な権限があります。この問題は、同じ内容のディレクトリのLinuxでは発生しません。
削除するディレクトリに読み取り専用のファイルが含まれている場合、それらの削除はWindowsでは失敗しますが、Linuxでは失敗しません。
存在しますがremovePathForcibly
、ごく最近導入されたばかりです。
そこで、ファイルを再帰的に書き込み可能にするための小さなヘルパー関数を次に示します。を呼び出す前に使用できますremoveDirectoryRecursive
。
import Control.Monad (forM_, when)
import System.FilePath ((</>))
import qualified System.Directory as FileSystem
-- Recursively makes all files and directories in a directory writable.
-- On Windows this is required to be able to recursively delete the directory.
makeWritableRecursive :: FilePath -> IO ()
makeWritableRecursive path = do
permissions <- FileSystem.getPermissions path
FileSystem.setPermissions path (FileSystem.setOwnerWritable True permissions)
isDirectory <- FileSystem.doesDirectoryExist path
when isDirectory $ do
contents <- FileSystem.listDirectory path
forM_ [path </> item | item <- contents] makeWritableRecursive
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加