Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Поиск информации о стране по ID на диске
- private Dictionary<string, object> GetCountryDisk(byte CountryID)
- {
- //становимся на начало таблицы со странами
- long TableStart = Header.countries_begin;
- Seek(TableStart, SeekOrigin.Begin);
- long Readed = 0;
- int NextRead = (int)Header.CountrySize;
- SxGeoUnpack Unpacker = new SxGeoUnpack(Header.pack_country, Header.DBEncoding);
- while (Readed < Header.CountrySize - 1)
- {
- //читаем запись
- byte[] buf = ReadBytes(NextRead);
- if (buf == null)
- {
- return null;
- }
- //распаковываем запись
- int RealLength = 0;
- Dictionary<string, object> Record = Unpacker.Unpack(buf,
- out RealLength);
- //проверяем, не нашли ли запись
- if ((byte)Record["id"] == CountryID)
- {
- return Record;
- }
- //Сохраняем количество фактических байт записи
- Readed += RealLength;
- //Отступаем в потоке назад
- long backstep = 0;
- if (TableStart + Readed + Header.MaxCountry > FileSize)
- {
- //если на чтение последних записей файла не хватило
- //максимальной длины записи
- backstep = -NextRead + RealLength;
- NextRead = (int)(FileSize - TableStart - Readed);
- //break;
- }
- else
- {
- backstep = -NextRead + RealLength;
- }
- Seek(backstep, SeekOrigin.Current);
- }
- return null;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement