6

FileHelpers 支持一种称为“运行时记录”的功能,当您在运行时才知道布局时,它可以让您将 CSV 文件读入 DataTable。

是否可以使用 FileHelpers 在运行时以相同的方式创建 CSV 文件?

根据一些用户输入,必须创建的 CSV 文件将具有不同的字段,这些字段只能在运行时知道。我可以按照阅读部分中的描述为 FileHelper 引擎创建所需的类型,但我无法弄清楚我的数据需要采用什么格式才能写入。

var engine = new FileHelpers.FileHelperEngine(GenerateCsvType());

engine.WriteStream(context.Response.Output, dontKnow);

编辑

或者,任何人都可以建议一个好的 CSV 库,它可以在运行前不知道其字段的情况下创建 CSV 文件?例如,从 DataTable 创建一个 CSV 文件。

4

2 回答 2

8

实际上,该库现在只允许读取运行时记录,但对于编写目的,您可以使用 DataTableToCsv 方法,如下所示:

CsvEngine.DataTableToCsv(dt, filename);

让我知道这是否有帮助。

于 2010-01-21T21:18:57.027 回答
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 });
于 2015-04-23T13:40:42.420 回答