当我在
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