Я пытаюсь реализовать touch
команду из командной строки Unix, но мне кажется, что моя последняя строка бросает исключение: ** Exception: ~/.todo: openFile: does not exist (No such file or directory)
Haskell Реализовать команду Unix «потрогать»
main = touch "~/.todo"
touch :: FilePath -> IO()
touch name = do
exists <- doesFileExist name
unless exists $ appendFile name ""
Если есть какие-либо ОС конкретных поведение, я тестирую macOS Sierra.
Я чувствую, как будто эта ошибка странно, что документация openFile
утверждает, что
Если файл не существует, и он открыт для вывода, он должен быть создан в виде нового файла.
Любые предложения относительно того, как исправить это?
Edit: Согласно @chi, команда touch
всегда должен открыть файл, даже если он уже существует, потому что он будет обновлять дату последнего изменения файла.
touch :: FilePath -> IO()
touch name = appendFile name ""
я успешно прикоснулся много файлов, используя этот код. возможно ли, что у вас странный cdd? – hao
Кстати, 'touch' часто также используется для обновления метки времени существующего файла. – chi
Исключение генерируется в 'openFile', но ваш фрагмент кода не включает это. Не могли бы вы его включить? – ocharles