我被分配一個任務,寫一個程序,將:如何正確關閉流?
打開文件。
閱讀內容。
用另一個詞替換某個單詞。
保存對文件的更改。
我知道我的代碼可以打開,閱讀和替換單詞。當我添加「將更改保存到文件」 - 部分時,會出現問題。下面是代碼:
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