Почему я не могу выполнить запись в файл?

#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