С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/96: Рейтинг темы: голосов - 96, средняя оценка - 4.72
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161

побайтное чтение из файла

25.08.2011, 15:03. Показов 19831. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день , нужно сделать побайтное чтение из hex файла , и добавить это в datagridview , к примеру мы имеем 10 записей , 1 запись = 22 байта , в datagridview.column[0] должно доабавлятся 20 байтов (string - название) datagridview.column[1] должно добавляться 2 байта (int - время ) , если мы имеем 10 записей это должно делаться 10 раз. Заранее благодарен.
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.08.2011, 15:03
Ответы с готовыми решениями:

Побайтное чтение *.bin файла и представление информации в 16-ом виде.
Привет всем! Кто может подсказать, как из файла прочитать байт и представить его в 16-ом виде? В тотал командере этот файл выглядит...

Побайтное чтение строки и запись в файл
Есть файл единиц и нулей, я его записываю в строку E="10010.....". Нужно перевести ее в биты(массив видимо), по значениям, то есть первые 8...

Побайтное считывание чисел из файла
Есть файл. В нем вещественные числа. Задача в том, чтобы в другой файл записать 1 и последнее число из исходного файла. Пока пытаюсь...

21
 Аватар для Merlin666
98 / 98 / 29
Регистрация: 26.12.2010
Сообщений: 220
25.08.2011, 15:07
Попробуй подключить пакет IO (using System.IO и поработай с классами BinaryReader, BinaryWriter =)
1
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
25.08.2011, 15:41  [ТС]
а можно какой нить мануальчик ? раньше таким не занимался
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
25.08.2011, 15:59
C#
1
2
3
4
byte[] result=null
using (FileStream fileStream=File.OpenRead("C:\\file.bin"))
using (BinaryReader binaryReader=new BinaryReader(fileStream))
    result=binaryReader.ReadAllBytes();
Но тут есть не мало важный момент т. к. чтение данных идет прямо в память размер возможного для чтения файла ограничен размером доступной в данный момент памяти. Конечно 220 байт это немного но вот если файл будет занимать хотя бы 22Мб уже нужно будет делать другим способом
1
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
25.08.2011, 16:13  [ТС]
Файл не превышает 10-20 мб.

Кстати в binaryReader нету функции ReadAllBytes
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
25.08.2011, 16:53
вам нужно считывать порциями по 22 байта и представлять каждую запись построчно в шестнадцатиричном виде?
C#
1
2
3
4
5
6
7
            byte[] buffer = File.ReadAllBytes(fileName);
            for (int i = 0; i < buffer.Length; i++) {
                Console.Write(buffer[i].ToString("x2"));
                if (i%22==0) {
                    Console.WriteLine();
                }
            }
в винформс по этой же логике

кстати, можете не загружать всё в массив, а налету всё делать
C#
1
2
3
4
5
6
7
8
9
10
11
12
            int b = 0;
            using(FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)){
                int counter = 0;
                do{
                    b=fs.ReadByte();
                    Console.Write(b.ToString("x2"));
                    if (counter%22==0) {
                        Console.WriteLine();
                    }
                    counter++;
                }while(b!=-1);
            }
3
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
26.08.2011, 09:14  [ТС]
Спасибо почти то что нужно, не подскажите как сделать побайтное чтение, к примеру мне нужно не с 1 байта читать а к примеру с 3 байта и до 5. Спасибо
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
26.08.2011, 10:12
C#
1
2
3
4
5
6
7
8
9
10
11
            int b = 0;
            byte[] buffer = new byte[2];
            using(FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) {
                fs.Seek(2, SeekOrigin.Begin);  //переходим на нужную позицию в файле, второй аргумент - относительно чего идет счет. смотрите MSDN
                for(int i = 0; i < 2; i++) {
                    b = fs.ReadByte();
                    if(b != -1) {
                        buffer[i] = (byte)b;
                    }
                }
            }
только уточните на третий или на второй элемент надо переходить в методе Seek, я не помню. если с нуля, то на второй, если с единицы идет счет, то на третий.. по идее от нуля. в общем пробуйте
1
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
26.08.2011, 11:56  [ТС]
Спасибо , ваш код помог , вот сам кое что набросал

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//считаем 1 байт - определяем сколько записей 
fs.Seek(2, SeekOrigin.Current);  
                  for (int i = 0; i < 1; i++)
                  {
                      b = fs.ReadByte();
                      if (b != -1)
                      {
                          buffer[i] = (byte)b;
                          lomom = b * 22; // 1 запись - 22 байта , 1 байт нам говорит сколько записей b*22
                          buffer = new byte [lomom]; 
                          MessageBox.Show(Convert.ToString(lomom));//для теста что мы получили 
                      }
                  }
//читаем записи
                  fs.Seek(4, SeekOrigin.Begin);  
                  for (int ia = 0; ia < lomom; ia++)
                  {
                      b = fs.ReadByte();
                      if (b != -1)
                      {
                          buffer[ia] = (byte)b;
                          MessageBox.Show(Convert.ToString(b));//для теста что мы получили 
                          lomom--;
                      }
                  }
Вот собственно вопрос , как сделать чтобы каждый 20 байт он добавлял в datagridview1.Column[0] //20 байт мы должно перевести в string и получить название а остальные 2 байта записывать в datagridview1.column[1] // это у нас int значение , а точнее время. Спасибо
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
26.08.2011, 12:03
нужно при чтении вести счет байтов и каждый 20ый (if(counter%20==0)....) тоесть если количество счетчик кратен 20 (или же после 20го байта обнулять счетчик) парсить и заносить куда вам надо
0
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
26.08.2011, 14:01  [ТС]
Спасибо сделал , но у меня появилась проблема , а именно если в hex файле есть к примеру 07 08 то он 0 не записывает , получается 78 (порядок мл. байт - ст. байт , перевожу на ст.байт мл байт получаю 87 , а должен 807)Вот сам код

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 for (int ia = 0; ia < lomom; ia++)
                  {
                      countbyte++;
                      b = fs.ReadByte();
                      if (b != -1)
                      {
                          buffer[ia] = (byte)b;
                          resultbyte = resultbyte + Convert.ToString(b);
                          if (countbyte == 20)
                          {
                              _index = dataGridView2.Rows.Add(resultbyte);
                              dataGridView2.Rows[_index].Cells[0].Value = resultbyte;
                              resultbyte = "" ;
                              
                          }
                          if (countbyte == 21)
                          {
                              onebyte = b;
                          }
                          if (countbyte == 22)
                          {
                              twobyte = b;
                              resultbyte = Convert.ToString(twobyte) + Convert.ToString(onebyte);
                              dataGridView2.Rows[_index].Cells[1].Value = resultbyte;
                              resultbyte = "";
                              countbyte = 0;
                          }
Спасибо
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
26.08.2011, 14:04
попробуйте не Convert.ToString(byteVal), а byteVal.ToString("x2")
простите, а "807" - это в шестнадцатиричной системе у вас?
1
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
26.08.2011, 16:05  [ТС]
да это в шестнадцатиричной системе , а точнее в шестнадцатиричной системе системе будет выглядеть так 0807 , но первый "0" мы как бы не считаем

Добавлено через 29 минут
эм , сделал как вы сказали , проблема следущая : если в переменную
resultss = Convert.ToInt32(resultbyte) / 60;
resultbyte попадает A,B,C,D,E,F то он вылетает с ошибкой "Входная строка имела неверный формат."
из-за Convert.ToInt32 , не подскажите во что можно конвертировать чтобы не вылетала ошибка ? Спасибо.
0
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
29.08.2011, 09:41  [ТС]
С этим разобрался , теперь проблема с кодировкой , при добавлении у меня вот что добавляет
Àáñöåññû
Àäåíîìà ïðîñòàòû
Àäèï.-ãåí.äèñòðîôèÿ

Не подскажите как можно решить эту проблему ? Спасибо.
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
29.08.2011, 11:20
проверьте кодировку текста
0
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
29.08.2011, 11:37  [ТС]
а какая кодировка должна быть? у меня стоит Юникод
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
29.08.2011, 11:41
возможно там ANSII.. попробуйте поиграться с кодировками. узнать точно какая кодировка у файла проблематично. как вариант - откройте его в notepad++ - там есть в менюшке "кодировка" - посмотрите там.
0
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
29.08.2011, 11:45  [ТС]
поигрался с кодировкой в Ansi вообще иероглифы , я думаю дело не в кодировке а в конвертации

C#
1
2
3
4
5
6
7
8
9
10
11
        public string ConvertStringToHex(string HexValue)
        {
            string StrValue = "";
            while (HexValue.Length > 0)
            {
                StrValue += System.Convert.ToChar(System.Convert.ToUInt32(HexValue.Substring(0, 2), 16)).ToString();
                HexValue = HexValue.Substring(2, HexValue.Length - 2);
            }
            return StrValue;
 
        }
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
29.08.2011, 11:49
погодите, а зачем вам конвертировать..
ладно, смотрите - у вас есть файл с текстом на сколько я догадываюсь. вы же можете его считать в байтовый массив (раз у вас стоит задача побайтового чтения файла) потом этот массив конвертировать в строку с помощью класса System.Text.Encoding. я подозреваю что вы сначала байт-массив конвертируете в хекс и потом в строку. попробуйте с байт-массива в строку напрямую - там же и укажете нужную кодировку
0
1 / 1 / 2
Регистрация: 01.06.2011
Сообщений: 161
29.08.2011, 11:51  [ТС]
ну вот здесь я и конвертирую из hex в string

C#
1
2
3
4
5
6
7
if (countbyte == 20)
                          {
                              result = ConvertStringToHex(resultbyte);
                              resultbyte = "";
 
                             
                          }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.08.2011, 11:51
Помогаю со студенческими работами здесь

Побайтное чтение файла
Подскажите, как с помощью JS реализовать побайтное чтение файла (аудио-файл если это имеет какое то значение).

readbyte, побайтное чтение из файла
Доброго времени. Подскажите как работать с побайтным чтением из файла: f = File.new(&quot;157426-1280x1024.jpg&quot;) size1 =...

Boost и побайтное чтение/запись в файл
Всем привет! Есть такой вопрос, как очень быстро скопировать файл? Скорость нужна в пределах~600 мб/сек. Возможно ли такое? Вот код,...

Как реализовать побайтное чтение из COM-port
Использую класс qextserialport! С Сom-port прилетают 8 байт! Необходимо читать первый раз 1 байт, затем 2 байта, затем 5 байт! И записывать...

Чтение чисел из файла. Чтение после конца потока невозможно
Товарищи, помогите. В Pascal'e я не силен, так что не бейте меня ногами, но есть задача: написать обычную программу для расчета некоторых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru