コード例 #1
0
        public bool Save_supplier_configs(UInt32 numcon, String filename)
        {
            FileStream     _fs = null;
            Container_file f;
            TableFile      tf;

            if (numcon >= Supplier_configs.Capacity)
            {
                return(false);
            }

            tf = Supplier_configs[(int)numcon].File;

            f = new Container_file(tf, tf.Name);
            if (!f.open())
            {
                //f = null;
                return(false);
            }

            try
            {
                _fs = new FileStream(filename, FileMode.OpenOrCreate);
            }
            catch
            {
                return(false);
            }

            MemoryTributary out_fs = new MemoryTributary();

            try
            {
                Inflate((MemoryTributary)f.Stream, out out_fs);
                out_fs.CopyTo(_fs);
            }
            catch
            {
                /*
                 * msreg_m.AddError("Ошибка распаковки файла конфигурации поставщика",
                 *  "Имя файла", _filename);
                 */

                _fs.Dispose();;
                return(false);
            }

            _fs.Dispose();

            return(true);
        }
コード例 #2
0
ファイル: ConfigStorage.cs プロジェクト: fishca/MetaRead
        public ConfigStorageTableConfigSave(TableFiles tabc, TableFiles tabcs, Tools1CD _base = null)
        {
            int            m;
            string         s;
            string         name, ext;
            TableFile      tf;
            TableFile      _DynamicallyUpdated;
            TableFile      _deleted;
            Container_file pcf;
            Container_file DynamicallyUpdated;
            Container_file deleted;
            Tree           tt;
            Tree           ct;

            Guid[]           dynup;
            int              ndynup = 0;
            Guid             g      = EmptyUID;
            V8Table          tab;
            int              dynno;
            HashSet <string> del = null;

            ready = tabc.getready();
            if (!ready)
            {
                return;
            }
            ready = tabcs.getready();
            if (!ready)
            {
                return;
            }

            present = tabc.gettable().Getbase().Getfilename() + "\\CONFIGSAVE";

            tab      = tabcs.gettable();
            _deleted = tabcs.getfile("deleted");

            if (_deleted != null)
            {
                deleted = new Container_file(_deleted, _deleted.Name);
                deleted.open();
                s  = tab.Getbase().Getfilename() + "\\" + tab.Getname() + "\\" + deleted.Name;
                tt = Tree.Parse_1Cstream(deleted.stream, "", s);
                if (tt is null)
                {
                    // error(L"Ошибка разбора файла deleted"
                    //     , L"Путь", s);
                }
                else
                {
                    ct = tt.Get_First();
                    if (ct is null)
                    {
                        // error(L"Ошибка разбора файла DynamicallyUpdated"
                        //     , L"Путь", s);
                    }
                    else
                    {
                        for (m = Convert.ToInt32(ct.Get_Value()); m != 0; --m)
                        {
                            ct = ct.Get_Next();
                            if (ct is null)
                            {
                                // error(L"Ошибка разбора файла DynamicallyUpdated"
                                //     , L"Путь", s);
                                break;
                            }
                            del.Add(ct.Get_Value().ToUpper());
                            ct = ct.Get_Next();
                            if (ct is null)
                            {
                                // error(L"Ошибка разбора файла DynamicallyUpdated"
                                //     , L"Путь", s);
                                break;
                            }
                        }
                    }
                }
            }

            tab = tabc.gettable();
            _DynamicallyUpdated = tabc.getfile("DynamicallyUpdated");
            dynup = null;
            if (_DynamicallyUpdated != null)
            {
                DynamicallyUpdated = new Container_file(_DynamicallyUpdated, _DynamicallyUpdated.Name);
                DynamicallyUpdated.open();
                s  = tab.Getbase().Getfilename() + "\\" + tab.Getname() + "\\" + DynamicallyUpdated.Name;
                tt = Tree.Parse_1Cstream(DynamicallyUpdated.stream, "", s);
                if (tt is null)
                {
                    // error(L"Ошибка разбора файла DynamicallyUpdated"
                    //     , L"Путь", s);
                }
                else
                {
                    ct = tt.Get_First();
                    if (ct is null)
                    {
                        // error(L"Ошибка разбора файла DynamicallyUpdated"
                        //     , L"Путь", s);
                    }
                    else
                    {
                        ct = tt.Get_First();
                        if (ct is null)
                        {
                            // error(L"Ошибка разбора файла DynamicallyUpdated"
                            //     , L"Путь", s);
                        }
                        else
                        {
                            ct = ct.Get_Next();
                            if (ct is null)
                            {
                                // error(L"Ошибка разбора файла DynamicallyUpdated"
                                //     , L"Путь", s);
                            }
                            else
                            {
                                if (ct.Get_Type() != Node_Type.nd_number)
                                {
                                    // error(L"Ошибка разбора файла DynamicallyUpdated"
                                    //     , L"Путь", s);
                                }
                                else
                                {
                                    ndynup = Convert.ToInt32(ct.Get_Value());
                                    if (ndynup > 0)
                                    {
                                        dynup = new Guid[ndynup];
                                        for (m = 0; m < ndynup; ++m)
                                        {
                                            ct = ct.Get_Next();
                                            string_to_GUID(ct.Get_Value(), ref dynup[m]);
                                        }
                                    }
                                    else
                                    {
                                        ndynup = 0;
                                    }
                                }
                            }
                        }
                    }
                }
            }

            m = ndynup + 2;

            int index = 0;

            foreach (var item_files in tabcs.files)
            {
                tf = item_files.Value;
                if (tf == _deleted)
                {
                    continue;
                }
                if (tf.addr[index].Blob_length == 0)
                {
                    continue;
                }

                name = tf.Name;
                s    = name.ToUpper();

                if (files.TryGetValue(s, out Container_file val))
                {
                    // error(L"Ошибка чтения CONFIGSAVE. Повторяющееся имя файла"
                    // , L"Имя файла", s);
                }
                else
                {
                    pcf       = new Container_file(tf, name);
                    files[s]  = pcf;
                    pcf.Dynno = m;
                }
                ++index;
            }

            index = 0;
            foreach (var item_files in tabc.files)
            {
                tf = item_files.Value;
                if (tf == _DynamicallyUpdated)
                {
                    continue;
                }
                if (tf.addr[index].Blob_length == 0)
                {
                    continue;
                }
                s = tf.Name;

                if (del.Contains(s.ToUpper()))
                {
                    continue;
                }

                m = s.LastIndexOfAny(".".ToCharArray());
                if (m != -1)
                {
                    name = s.Substring(1, m - 1);
                    ext  = s.Substring(m + 1, s.Length - m);
                }
                else
                {
                    name = s;
                    ext  = "";
                }
                if (ext.CompareTo("new") == 0)
                {
                    ext   = "";
                    dynno = ndynup + 1;
                }
                else
                {
                    dynno = -1;
                }
                m = name.IndexOf("_dynupdate_");
                if (m != -1)
                {
                    s    = name.Substring(m + "_dynupdate_".Length, name.Length - m - "_dynupdate_".Length + 1);
                    name = name.Substring(1, m - 1);
                    string_to_GUID(s, ref g);
                    if (dynup != null)
                    {
                        for (m = 0; m < ndynup; ++m)
                        {
                            if (g == dynup[m])
                            {
                                break;
                            }
                        }

                        dynno = (m >= ndynup) ? -2 : m;
                    }
                    else
                    {
                        dynno = -2;
                    }
                }

                if (!string.IsNullOrEmpty(ext))
                {
                    name = name + "." + ext;
                }
                s = name.ToUpper();
                if (files.TryGetValue(s, out Container_file val))
                {
                    pcf = val;
                    if (pcf.Dynno < dynno)
                    {
                        pcf.File  = tf;
                        pcf.Dynno = dynno;
                    }
                }
                else
                {
                    pcf       = new Container_file(tf, name);
                    files[s]  = pcf;
                    pcf.Dynno = dynno;
                }
                ++index;
            }
        }
コード例 #3
0
ファイル: ConfigStorage.cs プロジェクト: fishca/MetaRead
        public ConfigStorageTableConfig(TableFiles tabf, Tools1CD _base = null)
        {
            int    m;
            string s;
            string name, ext;
            string spoint      = ".";
            string sdynupdate  = "_dynupdate_";
            int    lsdynupdate = sdynupdate.Length;

            TableFile tf;
            //std::map<String, table_file*>::iterator pfilesmap;
            //std::map<String, container_file*>::iterator pfiles;
            TableFile      _DynamicallyUpdated;
            Container_file DynamicallyUpdated;
            Tree           tt;
            Tree           ct;

            Guid[]         dynup;
            int            ndynup = 0;
            Guid           g      = EmptyUID;
            V8Table        tab;
            int            dynno;
            Container_file pcf;

            ready = tabf.getready();
            if (!ready)
            {
                return;
            }
            present = tabf.gettable().Getbase().Getfilename() + "\\CONFIG";
            tab     = tabf.gettable();

            _DynamicallyUpdated = tabf.getfile("DynamicallyUpdated");
            dynup = null;

            if (_DynamicallyUpdated != null)
            {
                DynamicallyUpdated = new Container_file(_DynamicallyUpdated, _DynamicallyUpdated.Name);
                DynamicallyUpdated.open();
                s = tab.Getbase().Getfilename() + "\\" + tab.Getname() + "\\" + DynamicallyUpdated.Name;
                //tt = parse_1Cstream()
                tt = Tree.Parse_1Cstream(DynamicallyUpdated.Stream, "", s);
                if (tt is null)
                {
                    // error(L"Ошибка разбора файла DynamicallyUpdated"
                    //     , L"Путь", s);
                }
                else
                {
                    ct = tt.Get_First();
                    if (ct is null)
                    {
                        // error(L"Ошибка разбора файла DynamicallyUpdated"
                        //     , L"Путь", s);
                    }
                    else
                    {
                        ct = tt.Get_First();
                        if (ct is null)
                        {
                            // error(L"Ошибка разбора файла DynamicallyUpdated"
                            //     , L"Путь", s);
                        }
                        else
                        {
                            ndynup = Convert.ToInt32(ct.Get_Value());
                            if (ndynup > 0)
                            {
                                dynup = new Guid[ndynup];
                                for (m = 0; m < ndynup; ++m)
                                {
                                    ct = ct.Get_Next();
                                    string_to_GUID(ct.Get_Value(), ref dynup[m]);
                                }
                            }
                            else
                            {
                                ndynup = 0;
                            }
                        }
                    }
                }
            }

            int index = 0;

            foreach (var item_files in tabf.files)
            {
                tf = item_files.Value;
                if (tf == _DynamicallyUpdated)
                {
                    continue;
                }
                if (tf.addr[index].Blob_length == 0)
                {
                    continue;
                }
                s = tf.Name;

                m = s.LastIndexOfAny(spoint.ToCharArray());

                if (m != -1)
                {
                    name = s.Substring(1, m - 1);
                    ext  = s.Substring(m + 1, s.Length - m);
                }
                else
                {
                    name = s;
                    ext  = "";
                }

                if (ext.CompareTo("new") == 0)
                {
                    ext   = "";
                    dynno = -2;
                }
                else
                {
                    dynno = -1;
                }


                m = name.IndexOf(sdynupdate);
                if (m != -1)
                {
                    s    = name.Substring(m + lsdynupdate, name.Length - m - lsdynupdate + 1);
                    name = name.Substring(1, m - 1);
                    string_to_GUID(s, ref g);
                    if (dynup != null)
                    {
                        for (m = 0; m < ndynup; ++m)
                        {
                            if (g == dynup[m])
                            {
                                break;
                            }
                            if (m >= ndynup)
                            {
                                dynno = -2;
                            }
                            else
                            {
                                dynno = m;
                            }
                        }
                    }
                    else
                    {
                        dynno = -2;
                    }
                }
                if (string.IsNullOrEmpty(ext))
                {
                    name = name + spoint + ext;
                }
                s = name.ToUpper();

                if (files.TryGetValue(s, out Container_file val))
                {
                    pcf = val;
                    if (pcf.Dynno < dynno)
                    {
                        pcf.File  = tf;
                        pcf.Dynno = dynno;
                    }
                }
                else
                {
                    pcf       = new Container_file(tf, name);
                    files[s]  = pcf;
                    pcf.Dynno = dynno;
                }
                ++index;
            }
        }
コード例 #4
0
ファイル: ConfigStorage.cs プロジェクト: fishca/MetaRead
        public override ConfigFile readfile(String path)
        {
            Container_file           tf = null;
            V8Catalog                c;
            V8File                   f;
            int                      i;
            string                   fname;
            string                   r_name;
            ConfigFile               cf;
            ConfigStorageTable_addin cfa;

            if (!ready)
            {
                return(null);
            }

            fname = new StringBuilder(path).Replace('/', '\\').ToString();
            i     = fname.IndexOf("\\");
            if (i != -1)
            {
                r_name = fname.Substring(1, i - 1);
                fname  = fname.Substring(i + 1, fname.Length - i);
            }
            else
            {
                r_name = fname;
                fname  = "";
            }

            tf = (files.TryGetValue(r_name.ToUpper(), out Container_file val)) ? val : null;
            tf.open();

            if (!string.IsNullOrEmpty(fname))
            {
                if (tf.Cat is null)
                {
                    tf.Cat = new V8Catalog(tf.Stream, false, true);
                }
                c = tf.Cat;
                for (i = fname.IndexOf("\\"); i != -1; i = fname.IndexOf("\\"))
                {
                    f = c.GetFile(fname.Substring(1, i - 1));
                    if (f is null)
                    {
                        return(null);
                    }
                    c = f.GetCatalog();
                    if (c is null)
                    {
                        return(null);
                    }
                    fname = fname.Substring(i + 1, fname.Length - i);
                }
                f = c.GetFile(fname);
                if (f is null)
                {
                    return(null);
                }
                if (!f.Open())
                {
                    return(null);
                }
                cf          = new ConfigFile();
                cfa         = new ConfigStorageTable_addin();
                cfa.variant = ConfigStorageTableAddinVariant.cstav_v8file;
                cfa.f       = f;
                cf.str      = f.GetData();
                cf.str.Seek(0, SeekOrigin.Begin);
                cf.addin = cfa;
            }
            else
            {
                cf          = new ConfigFile();
                cfa         = new ConfigStorageTable_addin();
                cfa.variant = ConfigStorageTableAddinVariant.cstav_container_file;
                cfa.tf      = tf;
                cf.str      = tf.Stream;
                cf.str.Seek(0, SeekOrigin.Begin);
                cf.addin = cfa;
            }
            return(cf);
        }
コード例 #5
0
ファイル: ConfigStorage.cs プロジェクト: fishca/MetaRead
        public ConfigStorageTableConfigCas(TableFiles tabc, String configver, Tools1CD _base = null)
        {
            int            m;
            String         s, name, hashname;
            TableFile      _configinfo;
            Container_file configinfo;
            Tree           tt;
            Tree           ct;
            TableFile      tf;
            Container_file pcf;
            MemoryStream   stream;

            ready = tabc.getready();
            if (!ready)
            {
                return;
            }

            present = tabc.gettable().Getbase().Getfilename() + "\\CONFIGCAS";
            s       = present + "\\" + configver;

            _configinfo = tabc.getfile(configver);
            if (_configinfo is null)
            {
                // error(L"Ошибка поиска файла"
                //     , L"Путь", s
                //     , L"Имя", configver
                //     , L"Имя файла", L"configinfo");
                return;
            }

            configinfo          = new Container_file(_configinfo, "configinfo");
            files["CONFIGINFO"] = configinfo;
            configinfo.open();
            tt = Tree.Parse_1Cstream(configinfo.stream, "", s);
            if (tt is null)
            {
                // error(L"Ошибка разбора файла configinfo"
                //     , L"Путь", s);
                // delete tt;
                return;
            }
            ct = tt.Get_First();
            if (ct is null)
            {
                //error(L"Ошибка разбора файла configinfo"
                //    , L"Путь", s);
                //delete tt;
                return;
            }
            ct = ct.Get_Next();
            if (ct is null)
            {
                // error(L"Ошибка разбора файла configinfo"
                //     , L"Путь", s);
                // delete tt;
                return;
            }
            ct = ct.Get_Next();
            if (ct is null)
            {
                // error(L"Ошибка разбора файла configinfo"
                //     , L"Путь", s);
                // delete tt;
                return;
            }
            ct = ct.Get_First();
            if (ct is null)
            {
                // error(L"Ошибка разбора файла configinfo"
                //     , L"Путь", s);
                // delete tt;
                return;
            }

            stream = new MemoryStream();
            for (m = Convert.ToInt32(ct.Get_Value()); m != 0; --m)
            {
                ct = ct.Get_Next();
                if (ct is null)
                {
                    // error(L"Ошибка разбора файла configinfo"
                    //     , L"Путь", s);
                    // delete tt;
                    // delete stream;
                    return;
                }
                if (ct.Get_Type() != Node_Type.nd_string)
                {
                    // error(L"Ошибка разбора файла configinfo"
                    //     , L"Путь", s);
                    // delete tt;
                    // delete stream;
                    return;
                }
                name = ct.Get_Value();

                ct = ct.Get_Next();
                if (ct is null)
                {
                    // error(L"Ошибка разбора файла configinfo"
                    //     , L"Путь", s);
                    // delete tt;
                    // delete stream;
                    return;
                }
                if (ct.Get_Type() != Node_Type.nd_binary2)
                {
                    // error(L"Ошибка разбора файла configinfo"
                    //     , L"Путь", s);
                    // delete tt;
                    // delete stream;
                    return;
                }
                stream.Seek(0, SeekOrigin.Begin);

                //base64_decode(ct->get_value(), stream);

                byte[] data          = Convert.FromBase64String(ct.Get_Value());
                string decodedString = Encoding.UTF8.GetString(data);
                stream.Write(data, 0, data.Length);

                stream.Seek(0, SeekOrigin.Begin);

                hashname = hexstring(stream);

                tf = tabc.getfile(hashname);
                if (tf != null)
                {
                    pcf = new Container_file(tf, name);
                    files[name.ToUpper()] = pcf;
                }
                else
                {
                    // error(L"Ошибка поиска файла"
                    //     , L"Путь", s
                    //     , L"Имя", hashname
                    //     , L"Имя файла", name);

                    stream.Dispose();
                    return;
                }
            }


            stream.Dispose();
        }