Russian Qt Forum
Май 02, 2024, 02:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Читаем файл по-байтно  (Прочитано 5248 раз)
irv
Гость
« : Октябрь 10, 2010, 19:36 »

Есть файл с таким значением байтов:

00 02 00 01 ...(данные - 12 байт)...00 02

Как прочитать 3 и 4 байт и последущие 2 байта после данных??
Вот такой код:

    
Код:
    int allpunkt = 2; //первые 2 байта (00 02)
    int currpunkt = 2; //вторые 2 байта (00 02) - ИХ И НУЖНО ПРОЧИТАТЬ!!!!
    
    QFile file ("filename.bin");
    QDataStream stream(&file);
    
    if (!file.open(QIODevice::ReadOnly)){
      
        
        for  (int pnkt_cnt =1; pnkt_cnt< allpunkt; pnkt_cnt++){
        file.read((char*)&currpunkt,size(currpunkt);    
            
                    
        }
    }

Необходимые пояснения. Первые 2 байта являются общим счетчиком (всего пунктов в файле), 3 и 4 - номер текущего пункта. Как читать текущий пункт, если данные между ними занимают 12 байт.
Где ошибка? Спасибо.
« Последнее редактирование: Октябрь 10, 2010, 19:47 от irv » Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #1 : Октябрь 10, 2010, 20:11 »

Не очень понял причем тут многопоточность. А сути - читать Assistent про QFile.seek
Записан
Amigo_sa
Гость
« Ответ #2 : Октябрь 11, 2010, 11:07 »

Сначала считайте первый char и short, а потом используйте
int QDataStream::readRawData( char * s, int len):
Записан
developer
Гость
« Ответ #3 : Октябрь 11, 2010, 11:18 »

Все достаточно просто.

1. Открываєм файл.
2. Делаем seek на нужную позицию.
3. Читаем нужное количество байт.

Псевдо код
Нам нужно прочитать 10 байтов которие находяться по смещению 5 байтов от начала файла.

1. f = open("file", 'r').// здесь можно указать откуда делать seek - от начала или от конца.(До конца не уверен что здесь но возможность такая должна быть.)
2. f.seek(5) // перемещаем "курсор" на позицию 5 байтов относительно начала.
3. f.read(10) // читаем 10 байтов начиная с позиции 5. (точно не помню, но кажеться что "курсор" автоматически перемещается на позицию последнего прочитанного байта, в нашем случае 5+10=15 позиция, ето нужно проверить.)



















Записан
developer
Гость
« Ответ #4 : Октябрь 11, 2010, 11:22 »

А и еще. Мы можем делать seek как нам будет угодно. То есть бегать по всему файлу, от начала до конца - после seek(9) мы можем делать seek(4). И потом читать файл или определеное количество байт.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 22.