【发布时间】:2011-02-19 19:52:11
【问题描述】:
我对 Haskell 很陌生。事实上,我正在通过this section of this tutorial. 我遇到了这段代码:
import System.IO
import Data.Char
main = do
contents <- readFile "girlfriend.txt"
writeFile "girlfriendcaps.txt" (map toUpper contents)
读取名为“girlfriend.txt”的文件的内容并将该文件的大写版本写入名为“girlfriendcaps.txt”的新文件。
所以,我想稍微修改一下代码以获取要操作的文件名。我将代码更改为:
import System.IO
import Data.Char
main = do
path <- getLine
contents <- readFile path
writeFile path (map toUpper contents)
现在,显然这里的主要区别是我正在读取和写入同一个文件。正如我现在正在考虑的那样,这一定是一个惰性评估的事情,但我收到了“资源繁忙”错误消息。如果我错了,请纠正我,但我猜 readFile 在 writeFile 询问文件内容之前不会开始读取文件。然后 writeFile 尝试写入文件,但它仍然必须打开文件,因为它也在询问内容。我在附近吗?
所以,真正的问题是:如何在 Haskell 中读取和写入同一个文件?这是有道理的,它更困难,因为您将写入与您经常读取的文件不同的文件,但是为了我自己的启发,您将如何读取和写入同一个文件?
【问题讨论】:
标签: haskell