FileHelpers支持名为“RunTime Records”的功能,当您在运行时之前不知道布局时,可以将CSV文件读入DataTable。
是否可以使用FileHelpers以相同的方式在运行时创建CSV文件?
根据某些用户输入,必须创建的CSV文件将具有只能在运行时才能知道的不同字段。我可以按照阅读部分的描述为FileHelper引擎创建所需的Type,但我无法弄清楚我的数据需要写入的格式。
var engine = new FileHelpers.FileHelperEngine(GenerateCsvType());
engine.WriteStream(context.Response.Output, dontKnow);
修改
或者,任何人都可以建议一个好的CSV库,可以创建一个CSV文件而不知道它的字段,直到运行时?例如,从DataTable创建CSV文件。
答案 0 :(得分:6)
实际上,库现在只允许读取运行时记录,但是对于编写purpouse,您可以使用DataTableToCsv方法,如下所示:
CsvEngine.DataTableToCsv(dt, filename);
如果有帮助,请告诉我。
答案 1 :(得分:1)
我知道这是一个老问题,但我自己遇到了同样的问题并花了一些时间寻找解决方案,所以我决定分享我的发现。
如果您使用FileHelpers RunTime Records创建定义,则可以使用反射填充相同的定义。
例如,如果您创建了一个定义
DelimitedClassBuilder cb = new DelimitedClassBuilder("Customers", ",");
cb.AddField("StringField", "string");
Type t = cb.CreateRecordClass();
FileHelperEngine engine = new FileHelperEngine(t);
现在,您可以使用FileHelpers创建的相同类型来填充值,如下所示:
object customClass = Activator.CreateInstance(t);
System.Reflection.FieldInfo field = customClass.GetType().GetField("StringField", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
if (field != null)
{
field.SetValue(customClass, "StringValue");
}
然后将其写入文件或字符串:
string line = engine.WriteString(new object[] { customClass });