c#预编译大型数组或其他解决方案,将大数据嵌入可执行文件

时间:2017-04-25 16:58:11

标签: c#

我必须在我的应用中填写一个excel文件,打开,写入和关闭。

问题是该文件包含大量格式和宏(是公司模板),我意识到从C#重新生成将非常困难,最重要的是要维护。

所以我用hexeditor打开excel模板,将所有字节作为数组,如此

namespace myapp
{

    public static class ReviewTemplate // exported with HXD
    {
        public static string name = "AS-04522-EN";
        public static byte[] rawData = {
    0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x3E, 0x00, 0x03, 0x00, 0xFE, 0xFF, 0x09, 0x00, 0x06, 0x00, 0x00, 0x00,
...
...
...
}
}

然后,从C#生成这样的

File.WriteAllBytes(ReviewTemplate.name + DateTime.Now.ToString("_dd_MM_yyyy_HH_mm_ss") + ".xls", ReviewTemplate.rawData);

除了所有数组文件(* .cs)都有15MB,并且当我双击C#中的任何函数名以用于重构或其他东西时,它工作得非常好,.NET会挂起几分钟。

所以最大的问题是,如何以某种方式预编译这个array.cs文件,以便.NET使用它?也许全部放在一些dll中?在C中我使用* .obj文件。

EDITED

更清楚一点,在我生成所需的excel(无论如何有2.5MB)后,我使用interop打开,然后写入然后关闭。

是否可以嵌入所有这些数据并以某种方式写入内存,然后最终保存为磁盘上的excel文件?

谢谢,

1 个答案:

答案 0 :(得分:4)

如果您希望模板位于.exe / dll中,请将.xls添加到您的C#项目,右键单击,属性,将构建操作设置为“嵌入式资源”。

当您需要填写它时,请致电Assembly.GetManifestResourceStream以打开该嵌入资源的流,然后使用CopyTo代替WriteAllBytes。

更新:示例(未经测试)

Stream source = Assembly.GetExecutingAssembly().GetManifestResourceStream( ... );
string destName = "AS-04522-EN" + DateTime.Now.ToString("_dd_MM_yyyy_HH_mm_ss") + ".xls";
using( Stream dest = File.Create( destName ) )
    source.CopyTo( dest );