コード例 #1
0
        public void Save(Stream stream, IFileSource fileSource)
        {
            var file = new IniFile(IniOptions);

            var header = file.Sections.Add(HeadSectionName);

            header.Keys.Add("version", Version);

            foreach (var layer in Layers)
            {
                var handler = Handlers.Get(layer.Data);
                if (handler != null)
                {
                    var section = file.Sections.Add(handler.SectionName);
                    var context = new LayerHandlerContext(fileSource, layer.ExternalFiles);
                    handler.Save(section.Keys, layer.Data, context);

                    // save external file names
                    foreach (var key in handler.ExternalFileKeys)
                    {
                        section.Keys.Add(key, layer.ExternalFiles[key]);
                    }
                }
            }

            file.Save(stream);
        }
コード例 #2
0
        public void Load(Stream stream, IFileSource fileSource)
        {
            var file = new IniFile(IniOptions);

            file.Load(stream);

            var header = file.Sections[HeadSectionName];

            if (header == null)
            {
                throw new ResourceException("Header section is missing");
            }

            this.version = header.Keys.GetInt32("version", 1);
            this.layers.Clear();

            foreach (var section in file.Sections)
            {
                var handler = Handlers.GetByName(section.Name);
                if (handler != null)
                {
                    // get external file names to use them in the context
                    var externalFiles = new Dictionary <string, string>();
                    foreach (var key in handler.ExternalFileKeys)
                    {
                        externalFiles[key] = section.Keys[key].Value;
                    }

                    var context   = new LayerHandlerContext(fileSource, externalFiles);
                    var layerData = handler.Load(section.Keys, context);
                    var layer     = new IniLayer(layerData, externalFiles);

                    this.Layers.Add(layer);
                }
            }
        }
コード例 #3
0
 void ILayerHandler.Save(IniKeyCollection iniData, object data, LayerHandlerContext context)
 {
     Save(iniData, (T)data, context);
 }
コード例 #4
0
 object ILayerHandler.Load(IniKeyCollection iniData, LayerHandlerContext context)
 {
     return(Load(iniData, context));
 }
コード例 #5
0
 protected abstract void Save(IniKeyCollection iniData, T data, LayerHandlerContext context);
コード例 #6
0
 protected abstract T Load(IniKeyCollection iniData, LayerHandlerContext context);