我被分配一个任务,写一个程序,将:如何正确关闭流?
打开文件。
阅读内容。
用另一个词替换某个单词。
保存对文件的更改。
我知道我的代码可以打开,阅读和替换单词。当我添加“将更改保存到文件” - 部分时,会出现问题。下面是代码:
open System.IO
//Getting the filename, needle and replace-word.
System.Console.WriteLine "What is the name of the file?"
let filename = string (System.Console.ReadLine())
System.Console.WriteLine "What is your needle?"
let needle = string (System.Console.ReadLine())
System.Console.WriteLine "What you want your needle replaced with?"
let replace = string (System.Console.ReadLine())
//Saves the content of the file
let mutable saveLine = ""
//Opens a stream to read the file
let reader = File.OpenText filename
//Reads the file, and replaces the needle.
let printFile (reader : System.IO.StreamReader) =
while not(reader.EndOfStream) do
let line = reader.ReadLine()
let lineReplace = line.Replace(needle,replace)
saveLine <- saveLine + lineReplace
printfn "%s" lineReplace
//Opens a stream to write to the file
let readerWrite = File.CreateText(filename)
//Writes to the file
let editFile (readerWrite : System.IO.StreamWriter) =
File.WriteAllText(filename,saveLine)
printf "%A" (printFile reader)
我收到错误消息“的路径共享冲突......”,这让我相信,阅读流不关闭正常。我试图玩弄我的代码结构,并尝试了.NET库的不同的东西,但我总是得到相同的错误消息。任何帮助深表感谢。
哇,我也没想到,这个代码可以在3线写入。我认为你的代码很棒 - 但是,我觉得我仍然需要用我的代码找到问题。我试着调用Stream.Close(),但我仍然得到相同的错误信息。我什至尝试改变File.ReadAllLines(因为ReadAllLines在阅读后关闭文件)。我认为我的“写入文件”代码是错误的。我在msdn的网站上尝试阅读“如何:将文本写入文件”,但没有f#示例。你能看到我的代码有什么问题吗? – Hako
@Hakan我认为你应该接受Vandroiy的答案,因为它使用ReadAlllines和WriteAllLines,这是解决这类问题的最简单方法。关于你的问题,请看我的帖子。 – s952163
我不能放弃的另一个评论:看看这个答案跟问题定义有多接近:第1行:(打开文件)和阅读内容,第2行:替换单词,第3行:写内容。它确实很漂亮。 – s952163