Пример #1
0
        public static void WriteTo(Sheet sheet, string targetDir)
        {
            string filePath = $"{targetDir}/{sheet.Name}.ndb";

            byte[] fieldBytes = GetFieldBytes(sheet.Fields, out int dataSize);
            byte[] strBytes   = GetStringBytes(sheet, out Dictionary <string, int> strOffsetDic);
            byte[] arrayBytes = GetArrayBytes(sheet, strOffsetDic, out Dictionary <string, int> arrayOffsetDic);
            byte[] dataBytes  = GetDataBytes(sheet, strOffsetDic, arrayOffsetDic);

            NDBHeader header = new NDBHeader();

            header.version      = 1;
            header.dataCount    = sheet.LineCount;
            header.fieldCount   = sheet.FieldCount;
            header.dataSize     = dataSize;
            header.dataOffset   = NDBHeader.Size + fieldBytes.Length;
            header.stringOffset = header.dataOffset + dataBytes.Length;
            header.arrayOffset  = header.stringOffset + strBytes.Length;

            byte[] headerBytes = NDBConst.StructToByte(header, NDBHeader.Size);

            using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                fs.Write(headerBytes, 0, headerBytes.Length);
                fs.Write(fieldBytes, 0, fieldBytes.Length);
                fs.Write(dataBytes, 0, dataBytes.Length);
                fs.Write(strBytes, 0, strBytes.Length);
                fs.Write(arrayBytes, 0, arrayBytes.Length);

                fs.Flush();
            }
        }
Пример #2
0
        public static byte[] WriteToNDB(WDBSheet sheet)
        {
            NDBHeader header = new NDBHeader();

            header.fieldCount = sheet.FieldCount;
            header.lineCount  = sheet.LineCount;

            int structSize = MarshalUtility.GetStructSize(typeof(NDBHeader));

            header.fieldOffset = structSize;

            byte[] fieldBytes = GetFieldBytes(sheet, out var lineSize);
            header.lineSize = lineSize;

            header.lineOffset = structSize + fieldBytes.Length;

            byte[] strBytes  = GetStringBytes(sheet, out var strOffsetDic);
            byte[] lineBytes = GetLineBytes(sheet, strOffsetDic);

            header.stringOffset = structSize + fieldBytes.Length + lineBytes.Length;

            MemoryStream stream = new MemoryStream();

            byte[] headerBytes = MarshalUtility.StructToByte(header, structSize);
            stream.Write(headerBytes, 0, headerBytes.Length);
            stream.Write(fieldBytes, 0, fieldBytes.Length);
            stream.Write(lineBytes, 0, lineBytes.Length);
            stream.Write(strBytes, 0, strBytes.Length);

            return(stream.ToArray());;
        }