1

由于这个 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是我真正需要的。

4

2 回答 2

1

像这样的东西?

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();
    }
}

高温高压

于 2013-02-25T20:34:15.857 回答
1

尝试

File.AppendText("路径文件")

或者

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");
}
于 2013-02-25T20:34:45.177 回答