Beispiel #1
0
        /// <summary>
        /// возвращает истину, если в заданной папке есть поддерживаемая база данных
        /// </summary>
        /// <param name="databaseFolder"></param>
        /// <returns></returns>
        public static bool DatabaseInstalled(string databaseFolder)
        {
            //проверка наличия заголовочного файла
            string[] hfiles = Directory.GetFiles(databaseFolder, "*.hdr", SearchOption.TopDirectoryOnly);
            if (hfiles.Length != 1)
            {
                string[] sqfile = Directory.GetFiles(databaseFolder, "*.sq3", SearchOption.TopDirectoryOnly);
                if (sqfile.Length > 0)
                {
                    hfiles = sqfile;
                }
                else
                {
                    throw new FileLoadException("В папке " + databaseFolder + " не обнаружено корректной базы данных");
                }
            }

            string hfile = hfiles[0];

            //определение типа базы данных
            ETOPODBType dbt = BaseGrid.ReadDBType(hfile);

            //открытие базы данных в зависимости от типа
            switch (dbt)
            {
            case ETOPODBType.Float:
                string[] ffiles = Directory.GetFiles(databaseFolder, "*.flt", SearchOption.TopDirectoryOnly);
                if (ffiles.Length != 1)
                {
                    return(false);
                }
                string ffile = ffiles[0];
                break;

            case ETOPODBType.Int16:
                string[] bfiles = Directory.GetFiles(databaseFolder, "*.bin", SearchOption.TopDirectoryOnly);
                if (bfiles.Length != 1)
                {
                    return(false);
                }
                string dfile = bfiles[0];
                break;

            case ETOPODBType.SQLite: return(true);

            default: return(false);
            }
            return(true);
        }
Beispiel #2
0
        /// <summary>
        /// Создает новый экземпляр и загружает указанную базу данных
        /// </summary>
        /// <param name="databaseFolder"></param>
        /// <param name="callback">действие, выполняемой при загрузке БД</param>
        /// <exception cref="FileLoadException">Если при загрузке базы данных произошла ошибка</exception>
        public ETOPOProvider(string databaseFolder, Action <string> callback = null)
        {
            if (string.IsNullOrWhiteSpace(databaseFolder))
            {
                throw new ArgumentException("Пустой адрес папки БД");
            }

            if (callback != null)
            {
                callback.Invoke("Идет загрузка базы данных ETOPO");
            }

            //проверка наличия заголовочного файла
            string[] hfiles = Directory.GetFiles(databaseFolder, "*.hdr", SearchOption.TopDirectoryOnly);
            if (hfiles.Length != 1)
            {
                string[] sqfile = Directory.GetFiles(databaseFolder, "*.sq3", SearchOption.TopDirectoryOnly);
                if (sqfile.Length > 0)
                {
                    hfiles = sqfile;
                }
                else
                {
                    throw new FileLoadException("В папке " + databaseFolder + " не обнаружено корректной базы данных");
                }
            }

            string hfile = hfiles[0];

            //определение типа базы данных
            ETOPODBType dbt = BaseGrid.ReadDBType(hfile);

            //открытие базы данных в зависимости от типа
            switch (dbt)
            {
            case ETOPODBType.Float:
                string[] ffiles = Directory.GetFiles(databaseFolder, "*.flt", SearchOption.TopDirectoryOnly);
                if (ffiles.Length != 1)
                {
                    throw new FileLoadException("Обнаружено несколько *.flt файлов данных или не найдено ни одного");
                }
                string ffile = ffiles[0];
                this.database = new FloatDatabase(hfile, ffile);
                break;

            case ETOPODBType.Int16:
                string[] bfiles = Directory.GetFiles(databaseFolder, "*.bin", SearchOption.TopDirectoryOnly);
                if (bfiles.Length != 1)
                {
                    throw new FileLoadException("Обнаружено несколько *.bin файлов данных или не найдено ни одного");
                }
                string dfile = bfiles[0];
                this.database = new Int16Database(hfile, dfile);
                break;

            case ETOPODBType.SQLite:
                this.database = new SQLiteDatabase(hfile);
                break;

            default: throw new FileLoadException("Ошибка при открытии базы данных");
            }
        }