gpt4 book ai didi

unix - Haskell 实现 Unix "touch"命令

转载 作者:行者123 更新时间:2023-12-01 00:35:34 25 4
gpt4 key购买 nike

我正在尝试实现 touch来自 unix 命令行的命令,但似乎我的最后一行抛出异常:** Exception: ~/.todo: openFile: does not exist (No such file or directory)

main = touch "~/.todo"

touch :: FilePath -> IO ()
touch name = do
exists <- doesFileExist name
unless exists $ appendFile name ""

如果有任何特定于操作系统的行为,我正在从 macOS Sierra 进行测试。

我觉得这个错误好像很奇怪,因为 openFile 的文档指出

If the file does not exist and it is opened for output, it should be created as a new file.

关于如何解决这个问题有什么建议吗?

编辑:根据@chi 的说法,touch 命令应该总是打开文件,即使它已经存在,因为它会更新文件的最后修改日期。

touch :: FilePath -> IO ()
touch name = appendFile name ""

最佳答案

使用 touchFile 来自 unix 包 (System.Posix.Files.ByteString)。


appendFile name "" touch那样工作;当要追加的字符串为空时,appendFile 是空操作。

您可以通过在文件前后运行 stat 并比较修改时间来确认这一点。

关于unix - Haskell 实现 Unix "touch"命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42016605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com