Поиск:

Ответ в темуСоздание новой темы Создание опроса
> бинарные файлы, чтение и связь файлов 
:(
    Опции темы
344092
Дата 19.10.2007, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.6.2006

Репутация: нет
Всего: нет



Доброго время суток. 

Есть непонятка с чтением и связью 2х файлов.

Есть 2 файла, в первом просто данные в бинарном виде
 а во втором наличее и длина блоков в первом файле.

Как можно прочесть эти файлы связав их вместе? В Delphi есть параметр

--AssignFile-- Связывает дескриптор файла с бинарным или текстовым файлом

что то такое :
assignFile(dat,с:/1.dat);
reset(dat,1);
        assignFile(spr,leftstr(edit1.Text,length(edit1.Text)-3)+'spr');

а в C++ Builder как сделать подобное????

Заранее Спасибо.




PM MAIL   Вверх
0lmer
Дата 19.10.2007, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 3.12.2006

Репутация: нет
Всего: -1



Цитата(344092 @  19.10.2007,  14:02 Найти цитируемый пост)
Есть 2 файла, в первом просто данные в бинарном виде а во втором наличее и длина блоков в первом файле.

А подробнее можно?


Цитата(344092 @  19.10.2007,  14:02 Найти цитируемый пост)
а в C++ Builder как сделать подобное????


Код

#include <stdio.h>
void main() {
  FILE * f1;
  f1 = fopen("Имя файла", "rb"); //Открывает файл на чтение в бинарном режиме.
  //f1 == 0 если файл не был открыт
  //читать так:
  int * ptr = new int [10];
  int size = sizeof(int);
  int n = 10;
  fread(ptr, size, n, f1);
  //ptr - указатель куда читать данные
  //size - размер блока, n - кол - во блоков, f1 - указатель на файл.
  //ф-я возвращает кол-во прочитанных блоков 
  fclose(f);
}


в общем хелп тебе в помощь, будут вопросы - пиши. smile

PM   Вверх
Alexeis
Дата 19.10.2007, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



Цитата(344092 @  19.10.2007,  14:02 Найти цитируемый пост)
Как можно прочесть эти файлы связав их вместе? В Delphi есть параметр

--AssignFile-- Связывает дескриптор файла с бинарным или текстовым файлом

  Это не в делфи, а в паскале. В Delphi этот механизм оставлен лишь для совместимости с паскалем. В Delphi/C++ Builder с этой задачей эффективно справляется класс TFileStream.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
344092
Дата 19.10.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.6.2006

Репутация: нет
Всего: нет



Спасибо 

Цитата

f1 = fopen("Имя файла", "rb"); //Открывает файл на чтение в бинарном режиме.


А что такое "rb"  ???


Мне нужно считать с двух файлов информацию по-байтно справа налево в одном файле
типа 1.dat данные а в другом 1.src информация о блоках первого файла.

т.е мне както надо считать их вместе.... 

Код

AnsiString text; 
TFileStream *in = new TFileStream("с:1.dat",fmOpenRead); // открываю файл..а как подключить второй? 1.src
if( in != NULL ) { 
   int size; 
   in->Read(&size, sizeof(size)); 
   if( size != 0 ) { 
      try { 
         text.SetLength(size); 
         in->Read((void *)(text.data()), size); 
      } catch( EOutOfMemory& ) {} 
   } 
} 
delete in; 


-----------Вот информация о файлах-------

Информация выводится блоками по 2Кбайта. Один блок содержит 84 записи, вначале каждого блока записывается 64 нуля ( 32 байта). Одна запись имеет длину 24 байта и содержит поля:

7 знаков,16 знаков

длиной блоков данных  в 2048 байтов

Что то вроде того.... 

Блок данных - 2048 байтов  (84 записи по 24 байта)

00190     00 00 00 ¦ 00 00 00 00 ¦ 00 00 00 00 ¦ 00 00 00 00
001A0  00 00 00 00 ¦ 00 00 00 00 ¦ 00 00 00 00 ¦ 00 00 00 00
001B0  00 11 60 14 ¦ 51 16 50 14 ¦ FF FF FF FF ¦ F0 79 90 52
001C0  11 15 72 50 ¦ 00 01 30 00 ¦ 14 11 65 87 ¦ 55 44 13 7F
001D0  FF FF FF FF ¦ F0 69 90 52 ¦ 11 15 73 20 ¦ 00 11 10 00
001E0  71 11 61 14 ¦ 21 16 79 15 ¦ FF FF FF FF ¦ F0 79 90 52
001F0  11 15 73 30 ¦ 00 04 60 00 ¦ 46 11 69 93 ¦ 71 17 03 63
00200  FF FF FF FF ¦ F0 79 90 52 ¦ 11 15 73 40 ¦ 00 04 90 00
00210  49 11 67 90 ¦ 55 65 06 5F ¦ FF FF FF FF ¦ F0 69 90 52
00220  11 15 73 50 ¦ 00 00 60 00 ¦ 06 11 66 80 ¦ 41 16 74 06
00230  FF FF FF FF ¦ F0 79 90 52 ¦ 11 15 74 20 ¦ 00 05 80 00
00240  58 11 62 38 ¦ 25 67 41 8F ¦ FF FF FF FF ¦ F0 69 90 52
00250  11 15 74 40 ¦ 00 11 60 00 ¦ 76 11 67 91 ¦ 01 16 79 07
00260  FF FF FF FF ¦ F0 79 90 52 ¦ 11 15 75 10 ¦ 00 01 00 00
00270  10 11 69 88 ¦ 91 16 88 86 ¦ FF FF FF FF ¦ F0 79 90 52
00280  11 15 75 10 ¦ 00 02 30 00 ¦ 23 11 60 36 ¦ 61 16 80 48
00290  FF FF FF FF ¦ F0 79 90 52 ¦ 11 15 75 20 ¦ 00 15 80 01
002A0  18 11 70 44 ¦ 11 17 29 71 ¦ FF FF FF FF ¦ F0 79 90 52
002B0  11 15 75 70 ¦ 00 03 10 00 ¦ 31 11 68 92 ¦ 71 17 05 85
002C0  FF FF FF FF ¦ F0 79 90 52 ¦ 11 15 80 50 ¦ 00 21 10 01
002D0  31 11 70 81 ¦ 91 17 29 59 ¦ FF FF FF FF ¦ F0 79 90 52
002E0  11 15 81 00 ¦ 00 03 10 00 ¦ 31 11 62 33 ¦ 81 16 07 57
002F0  FF FF FF FF ¦ F0 79 90 52 ¦ 11 15 81 30 ¦ 00 55 30 03
00300  53 11 71 09 ¦ 31 17 10 29 ¦ FF FF FF FF ¦ F0 79 90 52
00310  11 15 82 00 ¦ 00 01 60 00 ¦ 16 11 69 64 ¦ 71 16 90 49
00320  FF FF FF FF ¦ F0 79 90 52 ¦ 11 15 82 60 ¦ 00 01 60 00
00330  16 11 70 57 ¦ 81 17 12 40 ¦ FF FF FF FF ¦ F0 79 90 52


Первый файл 1.dat содержит непосредственно информацию, а второй - наличее и длину блоков ,  Информацию в данных файлах необходимо читать по-байтно справа налево...... 

ShowMessage(text);


PM MAIL   Вверх
0lmer
Дата 20.10.2007, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 3.12.2006

Репутация: нет
Всего: -1



попробуй прочитать сначала из второго файла информацию о первом, а потом уже читать из первого файла.

Цитата(344092 @  19.10.2007,  17:59 Найти цитируемый пост)
А что такое "rb"  ???

"rb" - параметры открытия файла, r - на чтение, b - бинарный режим.

как читать справа налево не в курсе но можно попробовать считать данные куда нибуть типа стека, считал слева на право, а потом оттуда уже получится справа налево.

PM   Вверх
344092
Дата 21.10.2007, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.6.2006

Репутация: нет
Всего: нет



Разобрался с форматами.....

Считывать справа налево не надо..А вот буфер нужен.Вот кусок кода данной программы на Delphi с пояснением. Так вот как структуру под C++ заточить пока палки в колёса.


Код Delphi
Код


buf: array[0..2051] of byte; //буфер для данных
l:longint; //переменная для длины блока

while not(eof(spr)) do begin             //цикл обработки spr файла до конца

read(spr,l);                        //считываем длину блока  в l

blockread(dat,buf,l,re);     //счибываем блок заданной длины l в buf

//далее обрабатываем    buf  А блоки там 24-битные  если длина блока l<>2052 то это не блок 



;-(

PM MAIL   Вверх
344092
Дата 26.10.2007, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.6.2006

Репутация: нет
Всего: нет



Народ а чем можно заменить Delphi-вский     IntToHex ???? из десятеричной системы счисления в шестнадцатеричную систему 


PM MAIL   Вверх
Alexeis
Дата 26.10.2007, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



  А зачем менять? Он и в билдере есть 
Цитата

AnsiString IntToHex (int Value, int Digits);



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
344092
Дата 26.10.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 3.6.2006

Репутация: нет
Всего: нет



Спасибо  Alexeis, 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0495 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.