private void WriteFields(TableWriter writer, List <PackageField> fields) { writer.WriteInt32(fields.Count); for (int i = 0; i < fields.Count; ++i) { var field = fields[i]; var basic = BasicUtil.GetType(field.Type); if (basic != null) { writer.WriteByte(0); writer.WriteByte((sbyte)basic.BasicIndex); writer.WriteBool(field.Array); } else { writer.WriteByte(1); writer.WriteString(field.Type); writer.WriteBool(field.Array); } } }
//生成data文件 void CreateDataFile() { if (mDataDirectory.IsEmptyString()) { return; } using (var writer = new TableWriter()) { writer.WriteInt32(mDatas.Count); //数据数量 writer.WriteString(LayoutMD5); //文件结构MD5 writer.WriteInt32(mFields.Count); //字段数量 foreach (var field in mFields) { if (field.IsBasic) { writer.WriteInt8(0); writer.WriteInt8((sbyte)field.BasicType.Index); } else { writer.WriteInt8(1); writer.WriteString(field.Type); } writer.WriteBool(field.IsArray); } writer.WriteInt32(0); //自定义类数量 var keys = new List <string>(); foreach (var data in mDatas) { if (keys.Contains(data.Key)) { throw new Exception($"ID有重复项[{data.Key}], 行:[{data.RowNumber}]"); } keys.Add(data.Key); for (var i = 0; i < mFields.Count; ++i) { var field = mFields[i]; try { field.Write(writer, data.Values[i]); } catch (Exception e) { throw new Exception($"行:{data.RowNumber} 列:{field.Name} {e.Message}"); } } } FileUtil.CreateFile($"{mName}.{mSuffix}", writer.ToArray(), mDataDirectory.Split(ScorpioConversion.Util.Separator)); } }