Haskell removeDirectoryRecursive:Windows上的权限被拒绝

前端之家收集整理的这篇文章主要介绍了Haskell removeDirectoryRecursive:Windows上的权限被拒绝前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我在 Windows上使用 removeDirectoryRecursive时,会抛出类型为PermissionDenied的IOException,并显示消息“removeDirectoryRecursive:permission denied”.我确实拥有删除目录所需的权限.对于具有相同内容的目录,在Linux上不会发生此问题.

解决方法

如果要删除的目录包含只读文件,则删除这些文件将在Windows上失败,但在Linux上则不会.

removePathForcibly,但它只是介绍了very recently.

所以这里有一个小辅助函数来递归地使文件可写.它可以在调用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

猜你在找的Windows相关文章