加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Haskell removeDirectoryRecursive:Windows上的权限被拒绝

发布时间:2020-12-14 05:28:42 所属栏目:Windows 来源:网络整理
导读:当我在 Windows上使用 removeDirectoryRecursive 时,会抛出类型为PermissionDenied的IOException,并显示消息“removeDirectoryRecursive:permission denied”.我确实拥有删除目录所需的权限.对于具有相同内容的目录,在Linux上不会发生此问题. 解决方法 如果
当我在 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读