openFile-权限被拒绝-读取和写入同一文件时
我尝试将某些内容写入文件时出现错误“openFile-权限被拒绝”:openFile-权限被拒绝-读取和写入同一文件时,file,haskell,io,lazy-evaluation,File,Haskell,Io,Lazy Evaluation,我尝试将某些内容写入文件时出现错误“openFile-权限被拒绝”: saveFile content path = do writeFile path (show content) 为什么?从您的问题来看,您似乎在同一个文件上使用System.IO中的readFile和writeFile 请记住,它是惰性的,这意味着文件句柄最初是打开的,然后当程序需要数据时,将读取片段。只有在读取了所有数据或删除了对文件的所有引用后,才会关闭文件句柄。在此之前,资源将被锁定 在尝试写入文件之
saveFile content path = do
writeFile path (show content)
为什么?从您的问题来看,您似乎在同一个文件上使用
System.IO
中的readFile
和writeFile
请记住,它是惰性的,这意味着文件句柄最初是打开的,然后当程序需要数据时,将读取片段。只有在读取了所有数据或删除了对文件的所有引用后,才会关闭文件句柄。在此之前,资源将被锁定
在尝试写入文件之前,您需要确保该文件已被完全读取,或者以某种方式关闭该文件。实现这一点的一个简单方法是使用严格的IO。例如:
loadFileStrict :: Read a => FilePath -> IO a
loadFileStrict f = do
s <- readFile f
length s `seq` return s
loadFileStrict::Read a=>FilePath->IO a
loadFileStrict f=do
让我们检查一下你的路径
,你可能真的没有权限。我完全控制了这个文件:/o你的操作系统似乎不这么认为。您以前是否使用readFile
打开此文件?如果是这样,请尝试关闭句柄,然后用writeFile
再次打开它。是-我有:loadFile path=do x