私のプログラムで何が問題になっているのか、何かが助けてくれますか?Haskell:hSetFileSize:無効な引数(無効な引数)
hSetFileSize
:私は、次のプログラムを実行しようとしたとき、私は、次のエラーメッセージ取得しています無効な引数(無効な引数)あなたは読み取り専用でファイルを開いている
import System.IO
main = do
putStrLn "Enter file name (Including full path) to read"
fileName <- getLine
handle <- openFile fileName ReadMode
sizeBeforeTrunc <- hFileSize handle
content <- readFile fileName
putStrLn $ "Size of the file Before truncation is " ++ (show sizeBeforeTrunc) ++ " bytes"
putStrLn $ "Content of the file is " ++ content
putStrLn "**************************************"
let n = sizeBeforeTrunc `div` 2
putStrLn $ "Truncating file to " ++ (show n) ++ " bytes"
info1 <- hSetFileSize handle (toInteger 10)
putStrLn $ show info1
sizeAfterTrunc <- hFileSize handle
putStrLn $ "Size of the file After truncation is " ++ (show sizeAfterTrunc) ++ " bytes"
putStrLn $ "Content of the file is " ++ content
hClose handle
追加発言:
は、今、私たちは、タスクを完了するために必要なすべてのツールを持っています複数の読者または単一のライター。ファイルを2回開く(サイズを取得して内容を読むために、次に切り詰めるために1回)はより合理的です。 – Zeta
@ Zeta:良い点、答えを更新して、最初に 'ReadMode'操作を行い、次に' WriteMode'操作を行う可能性のある解決策を示しました。 – Cactus
また、前もってファイルを読むために、いくつかの厳密なIO機能([これら](https://hackage.haskell.org/package/strict/docs/System-IO-Strict.html)など)切り捨てる;標準IO機能は、残念ながら、怠惰です。 – Cactus