2014-06-30 46 views
3

我正在使用FileHelpers将DataTable内容写入CSV文件。如何使用FileHelpers使用标题写入CSV文件?

由于DataTable中记录数量庞大的我选择转储结果集,因为它是在数据表到CSV文件中像下面

CommonEngine.DataTableToCSV(dt, filename) 

而且CSV已经成功地使用具有的尺寸为2万条记录写150MB。

但我想在这个CSV文件的第一行添加文件头。

FileHelper允许使用CommonEngine.DataTableToCSV编写头文件吗?

回答

1

看看源代码,看起来好像没有办法设置标题行。但是,复制代码并编写自己的替代品很容易。事情是这样的:

public static void DataTableToCsv(DataTable dt, string filename, CsvOptions options, string headerLine) 
{ 
    using (StreamWriter writer = new StreamWriter(filename, false, options.Encoding, 102400)) 
    { 
     // output header 
     writer.Write(headerLine); 
     writer.Write(StringHelper.NewLine); 

     foreach (DataRow row in dt.Rows) 
     { 
      object[] itemArray = row.ItemArray; 
      for (int i = 0; i < itemArray.Length; i++) 
      { 
       if (i > 0) 
       { 
        writer.Write(options.Delimiter); 
       } 
       writer.Write(options.ValueToString(itemArray[i])); 
      } 
      writer.Write(StringHelper.NewLine); 
     } 
     writer.Close(); 
    } 
} 
+0

感谢之前,Filehelpers DLL已经在其他模块中使用,其中一些去生产。我们不允许添加更改。如果文件保护程序不允许这样做,是否有任何其他方式使用C#本机文件读/写方法实现相同。我担心的是,我不确定哪种方法可以实现,而不会超载内存。 – vijay

+1

您不必修改FileHelpers源代码。只需使用上述方法添加一个名为'MyCommonEngine'的新静态类,然后调用它。它使用与FileHelpers完全相同的源代码,因此内存使用应该相同。 – shamp00

+0

这真的是个好主意,但我的不好,options.ValueToString是一个内部方法,就像我们需要的大部分类和方法都有访问限制一样。要实现你的代码片段,我可能不得不最终获得文件帮助类的副本数量。换句话说,我使用filehelpers编写了一个完整的文件,然后我将添加以附加模式打开文件的头文件,如何使用C#文件I/O方法追加头文件? – vijay

5

必须使用engine.HeaderText = engine.GetFileHeader()你打电话多的回复WriteFile