2015-04-27 159 views
0

我試圖使用下面的代碼一次讀取多個文件。 代碼編譯,但是當執行時,我得到以下異常:Haskell讀取多個文件

***例外:..:openFile:權限被拒絕(權限被拒絕)。

我擁有系統管理員的所有權限。另外,我能夠在C#中做到這一點,沒有任何問題,意味着/懷疑這是代碼本身的問題。

感謝您的幫助。

main :: IO() 
main = do 
    putStrLn " Enter file path:" 
    content <- getLine >>= getDirectoryContents 
    x <- mapM readFile content 
    print x 
+3

函數getDirectoryContents也返回目錄[「。」,「..」],所以你需要過濾它們'filter(flip notElem [「。」,「..」])' – felipez

+0

謝謝!這確實是一個過濾列表的問題,我沒有在第一時間「視覺上」考慮要處理的txt文件的重要數量。 – HaskellFan

回答

5

你確定所有的文件都是文件嗎?它看起來像你試圖打開一個名爲..的文件。

將結果過濾爲僅包含實際文件。

+1

這就是問題所在。 '..'不是一個文件,而是一個目錄(上級目錄)。目錄不能用'readFile'打開。 FWIW,我得到一個更清晰的錯誤信息:'***異常:。:openFile:不適當的類型(是一個目錄)'。我懷疑操作系統是在Windows上,對於這些問題沒有這麼解釋。 – leftaroundabout

+0

謝謝!我使用Windows,目錄中包含很多txt文件,這就是爲什麼我沒有在返回列表中發現問題(..)的原因。隨着列表過濾它現在工作。 – HaskellFan