簡體   English   中英

openFile - 權限被拒絕 - 讀取和寫入同一文件時

[英]openFile - permission denied - when reading and writing to the same file

當我嘗試寫一些文件時,我有一個錯誤'openFile - permission denied':

saveFile content path = do
        writeFile path (show content)

為什么?

從您的問題來看,您似乎在同一文件中使用來自System.IO readFilewriteFile

請記住, System.IO.readFile惰性的 ,這意味着最初打開文件句柄,然后當程序需要數據時,將讀取片段。 只有在讀取了所有數據或刪除了對文件的所有引用后,才會關閉文件句柄。 在此之前資源已被鎖定

您需要確保在嘗試寫入文件之前完全讀取文件,或者以某種方式關閉文件。 實現此目的的一種簡單方法是使用嚴格的IO。 例如,:

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

在這里,我們在返回結果之前詢問字符串的長度。 這會強制讀取整個內容。

此模式在嚴格的包中捕獲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM