如何在 Haskell 中创建文件及其父目录?

She*_*rsh 4 directory haskell filepath

我想通过非平凡路径将内容写入文件,如果它们不存在,则创建所有父目录。所以下面的代码:

mkFile "foo/bar/baz/quux.txt"
Run Code Online (Sandbox Code Playgroud)

将创建所有的目录foo/foo/bar/并且foo/bar/baz/如果它们不存在(和文件quux.txt,以及当然)。实现这种功能的最简单方法是什么?理想情况下,我希望看到一个仅使用directoryfilepath库的解决方案。

wis*_*isn 8

我正在尝试为此找到最简单的方法,但找不到任何方法。唯一的方法是根据您的需求实现我们自己的功能。幸运的是,这只是使用System.DirectorySystem.FilePath.Posix库。

import Prelude

import System.Directory (createDirectoryIfMissing)
import System.FilePath.Posix (takeDirectory)

main :: IO ()
main = createAndWriteFile "foo/bar/baz/quux.txt" "something"

createAndWriteFile :: FilePath -> String -> IO ()
createAndWriteFile path content = do
  createDirectoryIfMissing True $ takeDirectory path

  writeFile path content
Run Code Online (Sandbox Code Playgroud)

下面是基于上面代码的结果。

foo
??? bar
    ??? baz
        ??? quux.txt
Run Code Online (Sandbox Code Playgroud)

您可以随意编辑代码。