2012-06-30 53 views
1

我試圖更改.CSV文件中的某些文本。如何通過StreamWriter更改文件中的某些文本

StreamReader sReader = new StreamReader(path1); 
while (sReader.Peek() != -1) 
{ 
    rowValue = sReader.ReadLine(); 
    if (rowValue == "25") 
    { 
     sWriter = new StreamWriter(path1); 
     rowValue = "27"; 
     sWriter.WriteLine(rowValue); 
    } 
} 

什麼都沒有發生。請問什麼是正確的方法?

+0

你實際上沒有任何內容寫入流,你只需創建一個'StreamWriter'的新實例,並改變'rowValue'的價值。 – 3aw5TZetdf

+0

你用過Flush()嗎? – yogi

+0

我添加了一行來寫rowValue。再次,行是「25」 – Alice

回答

1

您可以輕鬆地完成與System.IO.File.ReadAllLines這個任務和System.IO.File.WriteAllLines

string[] lines = File.ReadAllLines(path1); 

for(int i = 0; i < lines.Length; i++) 
{ 
    if(lines[i] == "25") lines[i] = "27"; 
} 

File.WriteAllLines(path1, lines); 
+0

更正了語法問題......輸入速度太快,但在這個網站上。 –

1

我不相信你可以做你想做的事......更新一條線。如果它可以工作,則將值27附加到文件的末尾。

查看ReadAllLinesWriteAllLines方法。您需要讀取整個文件,更改要更改的行,然後將其寫回。

1

好吧,如果讀取文件不是一個非常大的,你可以嘗試讀取內存中的所有和寫回

string[] lines = File.ReadAllLines(path1); 
using(StreamWrite sw = new StreamWriter(path1)) 
{ 
    foreach(string line in lines) 
    { 
     string lineOut = line; 
     if (line == "25") 
      lineOut = "27"; 
     sw.WriteLine(lineOut); 
    } 
    sw.Flush(); 
} 
+0

Steve,我在第7行有一個錯誤 - 無法分配給'行',因爲它是'foreach迭代變量 – Alice

+0

@Alice,answer更新,但也考慮克里斯蓋斯勒提出的替代方案。這是更直接 – Steve

+0

Yess!解決了。謝謝你,史蒂夫和克里斯 – Alice

相關問題