#file #haskell #io
#файл #haskell #io
Вопрос:
Я пытаюсь создать csv
файл в целях тестирования, и когда я пытаюсь его записать, он продолжает колебаться либо на 0kb
, либо 1kb
и записывается только 1 запись. Он продолжает колебаться подобным образом некоторое время, пока я не получу
openfile: в разрешении отказано
module Generator where
path="d:\data.csv"
cnt=1000000
main::IO()
main=do
let payload=makeString
writeToFile path cnt payload
makeString::String
makeString="0741142339,rn"
writeToFile::String->Int->String->IO()
writeToFile _ 0 _ =return ()
writeToFile path cnt payload=writeFile path payload >> writeToFile path (cnt-1) payload
Если я пытаюсь выполнить запись в папку на C://
, я получаю разрешение «не разрешено».
Комментарии:
1.
writeToFile path cnt payload = replicateM_ cnt (writeFile path payload)
; явная рекурсия не требуется. Та же логика выполняется, если вы заменитеwriteFile
наappendFile
, как рекомендуется.
Ответ №1:
Каждый вызов writeFile
перезаписывает существующий файл следующей записью.
То, что вы хотите сделать, это либо
- Откройте файл (
openFile
), запишите каждую строку в дескриптор файла (hPutStrLn
), закройте файл в конце (hClose
). - Сгенерируйте гигантскую строку, представляющую все содержимое файла, и
writeFile
это в конце.
Комментарии:
1. проверьте также
appendFile