2013-01-17 29 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文件过程。如果你们有任何疑问与我分享。这很好。 –