Example #1
0
 //生成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));
     }
 }