如果要删除的目录包含只读文件,则删除这些文件将在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
不能删除一个目录,这不是空... –
@MarcB:这就是为什么'removeDirectoryRecursive'是_recursive_:删除目录之前,递归删除所有内容。我知道问题所在,并且我在这里分享了解决方案[问答样式](https://stackoverflow.com/help/self-answer)来帮助其他可能遇到同样问题的人。 – Ruud