2011-05-21 49 views
2

我有一個錯誤,當「中openFile - 權限被拒絕」當我嘗試寫一些東西到文件:中openFile - 權限被拒絕 - 讀取和寫入同一個文件

saveFile content path = do 
     writeFile path (show content) 

爲什麼呢?

+2

檢查你的'路徑',你可能真的沒有權限。 – 2011-05-21 12:59:29

+0

我完全控制這個文件:/ – newuser 2011-05-21 14:27:47

+1

你的操作系統似乎認爲不然。你以前是否用'readFile'打開這個文件?如果是這樣,嘗試關閉句柄,然後再用'writeFile'打開它。 – 2011-05-21 14:33:32

回答

8

從您的問題,看起來您在同一個文件上使用readFilewriteFile來自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包中。

+0

thx男人非常多:) – newuser 2011-05-21 18:25:35