Как создать файл и его родительские каталоги в Haskell? - PullRequest
0 голосов
/ 03 ноября 2019

Я хочу записать содержимое в файл по нетривиальному пути и создать все родительские каталоги, если они не существуют. Поэтому следующий код:

mkFile "foo/bar/baz/quux.txt"

создаст все каталоги foo/, foo/bar/ и foo/bar/baz/, если они не существуют (и, конечно, файл quux.txt). Какой самый простой способ реализовать такую ​​функцию? В идеале я хотел бы увидеть решение, которое использует только библиотеки directory и filepath.

1 Ответ

4 голосов
/ 04 ноября 2019

Я пытаюсь найти самый простой способ для этого, но не могу найти какой-либо. Единственный способ - реализовать нашу собственную функцию в зависимости от ваших потребностей. К счастью, здесь используются только библиотеки System.Directory и System.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

Ниже приведен результат, основанный на приведенном выше коде.

foo
└── bar
    └── baz
        └── quux.txt

Вы можете редактировать код, однако выкак.

...