我有一個錯誤,當「中openFile - 權限被拒絕」當我嘗試寫一些東西到文件:中openFile - 權限被拒絕 - 讀取和寫入同一個文件
saveFile content path = do
writeFile path (show content)
爲什麼呢?
我有一個錯誤,當「中openFile - 權限被拒絕」當我嘗試寫一些東西到文件:中openFile - 權限被拒絕 - 讀取和寫入同一個文件
saveFile content path = do
writeFile path (show content)
爲什麼呢?
從您的問題,看起來您在同一個文件上使用readFile
和writeFile
來自System.IO
。
請記住,System.IO.readFile
是懶惰,這意味着文件句柄打開,最初,然後當您的程序需要數據,件將被讀取。只有所有數據都被讀取,或者文件的所有引用都被刪除後,文件句柄纔會關閉。在此之前資源被鎖定。
在嘗試寫入文件或以其他方式關閉文件之前,您需要確保文件已完全讀取。實現這一點的一個簡單方法是使用嚴格的IO。 E.g ,:
loadFileStrict :: Read a => FilePath -> IO a
loadFileStrict f = do
s <- readFile f
length s `seq` return s
在這裏,我們要求的字符串的長度,返回結果之前。這迫使讀取整個內容。
該模式被捕獲在strict包中。
thx男人非常多:) – newuser 2011-05-21 18:25:35
檢查你的'路徑',你可能真的沒有權限。 – 2011-05-21 12:59:29
我完全控制這個文件:/ – newuser 2011-05-21 14:27:47
你的操作系統似乎認爲不然。你以前是否用'readFile'打開這個文件?如果是這樣,嘗試關閉句柄,然後再用'writeFile'打開它。 – 2011-05-21 14:33:32