Bazı bedenler programımda neyin yanlış olduğunu anlayabilir.Haskell: hSetFileSize: geçersiz bağımsız değişken (Geçersiz bağımsız değişken)
hSetFileSize
: i aşağıdaki program yürütmeye çalışırsa, ben aşağıdaki hata iletisi alıyorum geçersiz argüman (Geçersiz değişken) Sadece okumak için dosyayı açıyoruz
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
Ek sözler:
Şimdi görevi tamamlamak için gerekli tüm araçlara sahip çoklu okuyucu veya tek bir yazar. Dosyayı iki kez açmak (boyutu almak ve içeriği okumak için bir kez, daha sonra kırpmak için) daha makul görünüyor. – Zeta
@Zeta: iyi bir nokta, cevabı, ilk önce "ReadMode" işlemlerini yaptıktan sonra 'WriteMode 'olanları içeren olası bir çözümü göstermek için güncelledim. – Cactus
Ayrıca, daha önce dosyayı okumak için bazı ısmarlama sıkı IO işlevlerini ([bunlar] gibi (https://hackage.haskell.org/package/strict/docs/System-IO-Strict.html)) kullanmayı tercih ederim. kesilmesiyle; standart IO fonksiyonları maalesef tembeldir. – Cactus