打开文件 - 权限被拒绝 - 读取和写入同一文件时



当我尝试将内容写入文件时,我遇到错误"打开文件 - 权限被拒绝":

saveFile content path = do
        writeFile path (show content)

为什么?

从您的问题来看,您似乎在同一文件上使用readFilewriteFile来自System.IO

请记住,System.IO.readFile惰性的,这意味着文件句柄最初是打开的,然后随着程序需要数据,将读取片段。只有在读取了所有数据或删除了对文件的所有引用后,才会关闭文件句柄。在此之前,资源将被锁定

在尝试写入文件之前,您需要确保文件已完全读取,或者以某种方式关闭文件。实现此目的的一种简单方法是使用严格的 IO。例如:

loadFileStrict :: Read a => FilePath -> IO a
loadFileStrict f = do
    s <- readFile f
    length s `seq` return s

在这里,我们在返回结果之前询问字符串的长度。这将强制读取整个内容。

此模式在严格包中捕获。

相关内容

  • 没有找到相关文章

最新更新