Услуги Сертификаты Новости Статьи База знаний Алгоритмы Портфолио Скачать Ссылки Поиск
Услуги arrow Новости arrow Как прочитать бинарный файл: пример на C#
Как прочитать бинарный файл: пример на C# Версия для печати Отправить на e-mail
12.01.2010

Предположим, есть некая система, написана она была не важно на чем, но хранит она данные в бинарных файлах собственной структуры. А вам нужно написать новую систему, которая сможет прочитать эти файлы, а потом использовать информацию в своих целях.

/// Формат файла (побайтно)
/// 0       длина строки идентификатора примеси (0x5)
/// 1..5    строковое значение (MyString)
/// 6       длина строки названия (Name)
/// 7..38   название (Name)
/// 39..46  значение типа Double
/// 47..48  значение типа Word
 

Вот пример как это сделать:

/// Преобразует набор байт в ASCII строку
/// "buffer" - Вектор байт
/// "byteIndex" - Первый байт
/// "byteCount" - Количество байт
/// на выходе строка

public string HexToString(byte[] buffer, int byteIndex, int byteCount)
{
    if (byteCount.Equals(0))
    {
        return String.Empty;
    }
    else
    {
        char[] chars = new char[byteCount];
        Decoder d = Encoding.GetEncoding(866).GetDecoder();
        int charLen = d.GetChars(buffer, byteIndex, byteCount, chars, 0);
        StringBuilder sb = new StringBuilder(charLen, byteCount);
        foreach (char c in chars)
        {
            sb.Append(c);
        }
        return sb.ToString().Trim();
    }
}

/// Импорт бинарного файла в динамический массив
public ArrayList ImportM1(string fileName)
{
    ArrayList Res = new ArrayList();

    try
    {
        using (FileStream input = File.OpenRead(fileName))
        {
            try
            {
                byte[] buffer = new byte[55]; // 55 байт - длина одной записи в файле
                int read;
                // Читать строки по 55 байт
                while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
                {
                    MyData md = new MattData();

                    md.MyString = HexToString(buffer, 1, 5);
                    md.Name = HexToString(buffer, 7, Convert.ToInt32(buffer[6]));
                    md.MyDouble = BitConverter.ToDouble(buffer, 39);
                    md.MyWord = BitConverter.ToUInt16(buffer, 47);
                    Res.Add(md);
                }
            }
            catch (Exception ex)
            {
                ErrorMessage = String.Format("Ошибка импорта файла {0}: {1}", fileName, ex.Message);
            }
        }
    }
    catch (Exception ex)
    {
        ErrorMessage = String.Format("Ошибка импорта файла {0}: {1}", fileName, ex.Message);
    }

    return Res;
}

PS: если Вам была полезна данная статья, поддержите наш ресурс, нажмите кнопочку "+1" вверху страницы. Спасибо!

Последнее обновление ( 06.03.2012 )
 
< Пред.   След. >