Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: irv от Октябрь 10, 2010, 19:36



Название: Читаем файл по-байтно
Отправлено: 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 байт.
Где ошибка? Спасибо.


Название: Re: Читаем файл по-байтно
Отправлено: xokc от Октябрь 10, 2010, 20:11
Не очень понял причем тут многопоточность. А сути - читать Assistent про QFile.seek


Название: Re: Читаем файл по-байтно
Отправлено: Amigo_sa от Октябрь 11, 2010, 11:07
Сначала считайте первый char и short, а потом используйте
int QDataStream::readRawData( char * s, int len):


Название: Re: Читаем файл по-байтно
Отправлено: developer от Октябрь 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 позиция, ето нужно проверить.)





















Название: Re: Читаем файл по-байтно
Отправлено: developer от Октябрь 11, 2010, 11:22
А и еще. Мы можем делать seek как нам будет угодно. То есть бегать по всему файлу, от начала до конца - после seek(9) мы можем делать seek(4). И потом читать файл или определеное количество байт.