2014-06-30 45 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