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(); } }
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());; }