2013-01-17 34 views
1

下面這個topic我能夠創造 新行之後,但我的問題是如何 我保存或寫入新行添加到文件?編輯/保存在一個CSV行文件

我試過'StreamWriter',但它只寫了新創建的 行。

有什麼建議嗎?

這是到目前爲止我的代碼:

string path = @"C:/CSV.txt"; 

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

var splitlines = lines.Select(l => l.Split(',')); 

foreach (var line in splitlines) 
{ 
    if(line[1].Contains("34")) 
    {           
    line[1] = "100"; 
    var newline = string.Join(",", line); 
    StreamWriter sr = new StreamWriter(path);  
    sr.WriteLine(newline); 
    sr.Close();          
    } 
} 
+0

我看不到*任何*正在寫入或打印。 – 2013-01-17 02:34:27

+0

爲什麼選擇投票?好吧,我忘了在上面的代碼塊(我現在已更新)中添加'StreamWriter'行。但正如我在文章中提到的,我嘗試了StreamWriter,並且只能將新行寫入文件。而我忘記了使用列表的數組列表或更好的方法必須更新並重寫到Zarathos解決方案糾正的文件。 – Kevin

+0

(現已刪除)反對票是缺少代碼。然而,考慮到「包含」有時是真實的,因此'WriteLine'只是在某個時候執行應該不會令人吃驚。而且,寫入封閉流是無效的。 – 2013-01-17 03:43:57

回答

5

這裏是您使用的解決方案StreamReader類別:

String path = @"C:\CSV.txt"; 
List<String> lines = new List<String>(); 

if (File.Exists(path)); 
{ 
    using (StreamReader reader = new StreamReader(path)) 
    { 
     String line; 

     while ((line = reader.ReadLine()) != null) 
     { 
      if (line.Contains(",")) 
      { 
       String[] split = line.Split(','); 

       if (split[1].Contains("34")) 
       { 
        split[1] = "100"; 
        line = String.Join(",", split); 
       } 
      } 

      lines.Add(line); 
     } 
    } 

    using (StreamWriter writer = new StreamWriter(path, false)) 
    { 
     foreach (String line in lines) 
      writer.WriteLine(line); 
    } 
} 

如果您要覆蓋文件,請使用this StreamWriter構造函數與append = false

+0

卓越的解決方案Zarathos。沒有意識到StreamWriter構造函數。但現在我知道:)謝謝 – Kevin

1

也許財產以後這樣,你可能需要把它清理乾淨,並添加了一些錯誤處理,但它的工作

string path = @"C:\\CSV.txt"; 

    string[] lines = File.ReadAllLines(path); 
    for (int i = 0; i < lines.Length; i++) 
    { 
     string line = lines[i]; 
     if (line.Contains(",")) 
     { 
      var split = line.Split(','); 
      if (split[1].Contains("34")) 
      { 
       split[1] = "100"; 
       line = string.Join(",", split); 
      } 
     } 
    } 
    File.WriteAllLines(@"C:\\CSV.txt", lines); 
0
 string str; 
     string PID; 
     string PN; 
     string UP; 
     string DIS; 
     string STK; 
     string CSVFilePathName = @"C:\admin.csv"; 
     string[] Lines = File.ReadAllLines(CSVFilePathName); 
     File.Delete(CSVFilePathName); 
     StreamWriter sw = new StreamWriter(CSVFilePathName", true); 

      PID = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[0].Controls[0])).Text; 
      PN = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text; 
      UP = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text; 
      DIS = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text; 
      STK = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[4].Controls[0])).Text; 
     foreach (string li in Lines) 
     { 
      string[] Fields = li.Split(','); 
      if(PID==Fields[0]) 
      {                  
       str = PID + "," + PN + "," + UP + "," + DIS + "," + STK;         
      } 
      else 
      { 
       str = Fields[0] + "," + Fields[1] + "," + Fields[2] + "," + Fields[3] + "," + Fields[4];     
      } 
      sw.WriteLine(str); 
     } 
     sw.Flush(); 
     sw.Close(); 
+0

這是從網格獲取價值和更新.CSV文件過程。如果你們有任何疑問與我分享。這很好。 –