2011-11-16 82 views
0

由於我使用非拉丁字母,如果使用StreamWriter,字符不正確。c#編輯txt文件而不創建另一個文件(沒有StreamWriter)

 String line; 
     StreamReader sr = new StreamReader(@"C:\Users\John\Desktop\result.html"); 
     line = sr.ReadLine(); 
     while (line != null) 
     { 
      line = sr.ReadLine(); 
      if (line.Contains("</head>")) 
      { 
       line = "<img src=\"result_files\\image003.png\"/>" + line; 
      } 
     } 
     sr.Close(); 

在這裏我正在編輯我想在文件中編輯的字符串,但我並沒有將它保存在同一個文件中。怎麼做?

+0

請看看這個鏈接http://www.codeproject.com/KB/cs/InsertTextInCSharp.aspx –

+0

我認爲在您的代碼段,你只是操縱堆中的字符串,StreamReader僅用於讀取而不用於寫入,您正在嘗試寫哪個非拉丁字母?它是> Delashmate

+0

你可以在StreamWriter上設置編碼 –

回答

0

如果您使用接受你不應該有不正確的字符任何問題的編碼StreamWriter constructors之一。你也正在跳過你的閱讀方法的第一行。

Encoding encoding; 
StringBuilder output = new StringBuilder(); 
using (StreamReader sr = new StreamReader(filename)) 
{ 
    string line; 
    encoding = sr.CurrentEncoding; 
    while ((line = sr.ReadLine()) != null) 
    { 
     if (line.Contains("</head>")) 
     { 
      line = "<img src=\"result_files\\image003.png\"/>" + line; 
     } 
     output.AppendLine(line); 
    } 
} 
using (StreamWriter writer = new StreamWriter(filename, false, encoding)) 
{ 
    writer.Write(output.ToString()); 
} 
+0

這給了我一個空的輸出。 –

+0

我剛剛重新測試,它對我來說工作正常。我只是用它來複制一個文本文件。 – calum

+0

你說得對。 Tnx :) –

-4

您使用StreamReader。名稱說明它的功能。讀書!

髒碼

 if (File.Exists(fileName)) 
     { 
      int counter = 1; 
      StringBuilder sb = new StringBuilder(); 
      foreach (string s in File.ReadAllLines(fileName, Encoding.Default)) 
      { 
       if (s.Contains("</head>")) 
       { 
        s= "<img src=\"result_files\\image003.png\"/>" + line; 
       } 

        sb.AppendLine(s); 

       counter++; 
      } 

      File.WriteAllText(fileName, sb.ToString(), Encoding.Default); 
     } 
0

我認爲最簡單的辦法是

  1. 打開該文件在讀/寫模式

  2. 從文件中讀取一切

  3. 進行修改inmemory

  4. 重寫它bac k到文件,而不是追加..