【问题标题】:Why can't I write to a file?为什么我不能写入文件?
【发布时间】:2019-08-01 22:11:00
【问题描述】:

我正在尝试创建一个csv 文件用于测试目的,当我尝试编写它时,它会继续在0kb1kb 处波动,并且只写入了一条记录。它会继续像这样波动一段时间,直到我得到

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,\r\n"

    writeToFile::String->Int->String->IO()
    writeToFile _ 0 _ =return ()
    writeToFile path cnt payload=writeFile path payload >> writeToFile path (cnt-1)  payload

如果我尝试写入 C:// 上的某个位置,我将获得不允许的权限。

【问题讨论】:

  • writeToFile path cnt payload = replicateM_ cnt (writeFile path payload);不需要显式递归。如果按照建议将writeFile 替换为appendFile,则同样的逻辑成立。

标签: file haskell io


【解决方案1】:

每次调用writeFile 都会用下一条记录覆盖现有文件。

你想做的是任一

  • 打开文件(openFile),将每一行写入文件句柄(hPutStrLn),最后关闭文件(hClose)。
  • 生成一个代表整个文件内容的巨大字符串,并在末尾生成writeFile

【讨论】:

  • 检查appendFile
猜你喜欢
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-13
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多