C# Получение пути к папке ОС Windows

Оказывается, вплоть до версии .NET 4 в перечислении Environment.SpecialFolder нет пути к папке, куда установлена Windows (обычно C:\Windows). Эту досадную оплошность можно обойти двумя способами:
1. Посмотреть в переменную окружения SystemRoot или windir:
string windir=Environment.GetEnvironmentVariable("SystemRoot");
string windir=Environment.GetEnvironmentVariable("windir");

2. ВНЕЗАПНО, бывают хитрые самосборные или специальные дистрибутивы, где данных переменных окружения нет. Тогда:
— надо взять путь к директории system, (обычно это C:\Windows\System32), который есть в Environment.SpecialFolder во всех версиях .NET: Environment.SpecialFolder.System
— получить директорию выше уровнем:

string windir = System.IO.Directory.GetParent(
        Environment.GetFolderPath(Environment.SpecialFolder.System));

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Содержание

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. Часть I — инициализация (и введение)
     -Преамбула
     -Общая структура БД
     -Заголовок базы данных
     -Дополнительные перечисления и мелкая корректировка с придирками.
     -Поля, свойства и конструктор класса
     -Функции для чтения БД
     -Функции для чтения заголовка
     -Закрытие базы данных
     -Открытие базы данных, чтение и проверка заголовка, чтение индексов.

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Часть II. Поиск.
     -Трехбайтовые числа
     -Байтовый substr
     -Поиск ID или смещения в «Диапазонах IP»
     -Функция поиска в «Диапазонах» (SearchDB)

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Часть III. Универсальный формат упаковки данных и получение данных из справочников.
     -Приведение типов
     -Анализ (распаковка) записи
     -Обработка полей записи
     -Дополнительные функции

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Часть IV. Получение данных.
     -Чтение информации из справочников
     -Поиск в справочнике по ID
     -Очистка ответа
     -Функция, формирующая финальный ответ.

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Приложение
     -Дополнительно
     -Источники
     -Код на GitHub
     -Создатели

Скачать все в PDF
SxGeoSharp на GitHub

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Приложение

Дополнительно.

Код для отладки (тест работы со справочниками, распаковки «универсального формата» и загрузка справочников в DataSet)

Источники

Спецификация формата SxGeo Копия

Код на GitHub

https://github.com/tolik-punkoff/sxgeosharp

Создатели

БД Cypex Geo (с) 2012-2018 БИННОВАТОР
SxGeoSharp:
Идея: Leha Silent (Tolik-punkoff/Chaossoft/ОИМ)
Реализация: Werwolf aka PunkArr[] aka IogSohoth (Tolik-punkoff/Wildsoft/ОИМ)
Спонсор: OpPosition (ОИМ)

Слава Украине!

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. -Часть IV. Получение данных.

Получение кода страны по ID (для БД SxGeoCountry)

Закончим с SxGeoCountry, в которой нет справочников и информации кроме ID страны.
В оригинальном исходнике есть массив с кодами стран, а позиция в массиве, как раз ID страны из базы. Соответственно, надо просто сходить в нужный элемент массива за ISO-кодом страны.
Сделаем соответствующую функцию private string IdToIso(uint ID)

Чтение информации из справочников

Тут все просто, мы должны либо взять определенное количество байт из массива (на это дело есть bSubstr), либо прочиатать данные с диска. На это у нас есть поток SxStream и все позиции — start — откуда начинать читать, seek — сдвиг в файле, и max — максимальная длина записи в байтах.Читать далее…