示例#1
0
        public void SaveTo(string directory, Encoding encoding = null)
        {
            if (directory == null)
            {
                throw new ArgumentNullException(nameof(directory));
            }

            IEnumerable <PropertyInfo> dbcFiles = GetProperties();

            foreach (PropertyInfo property in dbcFiles)
            {
                IDbcFile dbc  = (IDbcFile)property.GetGetMethod(true).Invoke(this, null);
                string   path = Path.GetFullPath(Path.Combine(directory, dbc.FileName));
                using (FileStream stream = File.Open(path, FileMode.Create, FileAccess.Write, FileShare.None))
                    using (BinaryWriter writer = new BinaryWriter(stream, encoding ?? Encoding.UTF8, false))
                    {
                        dbc.Write(writer, default(DbcInfo)); // TODO
                    }
            }
        }
示例#2
0
        private const uint MagicId = 0x43424457; // WDBC

        public static T LoadFrom(string directory, Encoding encoding = null)
        {
            if (directory == null)
            {
                throw new ArgumentNullException(nameof(directory));
            }

            IEnumerable <PropertyInfo> dbcFiles = GetProperties();
            T instance = Activator.CreateInstance <T>();

            foreach (PropertyInfo property in dbcFiles)
            {
                IDbcFile dbc  = (IDbcFile)Activator.CreateInstance(property.PropertyType);
                string   path = Path.GetFullPath(Path.Combine(directory, dbc.FileName));
                using (FileStream stream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read))
                    using (BinaryReader reader = new BinaryReader(stream, encoding ?? Encoding.UTF8, false))
                    {
                        uint magic = reader.ReadUInt32();
                        if (magic != MagicId)
                        {
                            throw new DbcException($"{dbc.FileName} is not a valid DBC file");
                        }

                        DbcInfo info = new DbcInfo(
                            reader.ReadUInt32(), // record count
                            reader.ReadUInt32(), // record size
                            reader.ReadUInt32()  // string size
                            );

                        dbc.Read(reader, info);
                    }

                property.GetSetMethod(true).Invoke(instance, new object[] { dbc });
            }

            return(instance);
        }