由于此CSV文件的第一行已包含列名,因此我只想忽略第一行并开始使用StringBuilder从第二行开始写入。
StringBuilder sb = new StringBuilder();
foreach (DataRow dr in distinctValues.Rows)
{
vendor = dr.ItemArray[0].ToString();
for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
{
if (vendor == ds.Tables[0].Rows[i]["VendorCode"].ToString())
{
for (int j = 0; j <= ds.Tables[0].Columns.Count - 1; j++)
{
if (j != 0)
sb.Append(",");
sb.Append(ds.Tables[0].Rows[i][ds.Tables[0].Columns[j]]);
}
sb.AppendLine();
}
}
File.WriteAllText(@csvFile, sb.ToString());
}
最后我明白我需要的不是写文件而是编辑文件。所以改变主意终于给出了答案。 File.AppendAllText 是我真正需要的。
答案 0 :(得分:0)
这样的东西?
class Program
{
private const string csv ="Header\r\nLine1\r\nLine2";
static void Main(string[] args)
{
StringReader reader = new StringReader(csv);
StringBuilder builder = new StringBuilder();
bool header = true;
while (true)
{
string line = reader.ReadLine();
if(header)
{
header = false;
continue;
}
if (line == null)
break;
builder.AppendLine(line);
}
Console.WriteLine(builder.ToString());
Console.ReadLine();
}
}
HTH
答案 1 :(得分:0)
尝试
或
FileMode.Append
通过FileStream
如果是File.AppendText
的情况,您对sb.AppendLine()
的所有来电都将在下面的示例中变为sw.WriteLine()
:
// This text is always added, making the file longer over time
// if it is not deleted.
using (StreamWriter sw = File.AppendText(path))
{
sw.WriteLine("This");
sw.WriteLine("is Extra");
sw.WriteLine("Text");
}