Форум программистов, компьютерный форум CyberForum.ru

Объединение двух бинарных файлов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 145
17.04.2013, 21:30     Объединение двух бинарных файлов #1
Как сделать программу которая считывает числа (упорядоченные по возрастанию) из двух бинарных файлов f и g, и сливает их в один упорядоченный файл ff (тоже бинарный)?
пробовал сделать, проблема в чтении из бин. файла - неизвестно сколько будет чисел в каждом из файлов, а если писать while(!feof(file)) то вылазят какие-то ошибки непонятные, и тем более непонятно как сливать числа в один файл - записать в массивы нельзя, т.к. неизвестно сколько будет чисел в каждом из файлов.
помогите пожалуйста разобраться
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2013, 21:30     Объединение двух бинарных файлов
Посмотрите здесь:

Чтение бинарных файлов C++
C++ Объединение 2-х бинарных деревьев в одно
C++ Чтение бинарных файлов
C++ Чтение бинарных файлов
Запись бинарных файлов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
17.04.2013, 22:07     Объединение двух бинарных файлов #2
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <fstream>
 
 
template< typename To, typename From >
inline To ptr_cast( From ptr ) {
   return static_cast< To >( static_cast< void * >( ptr ));
}
 
int main() {
   std::ifstream inFirst( "1.bin", std::ios::in | std::ios::binary );
   std::ifstream inSecond( "2.bin", std::ios::in | std::ios::binary );
   std::ofstream outThird( "3.bin", std::ios::out | std::ios::binary );
   
   int integer1;
   int integer2;
   
   if (!( inFirst && inSecond && outThird ))
      return -1;
 
   inFirst.read( ptr_cast< char * >( &integer1 ), sizeof( integer1 ));
   inSecond.read( ptr_cast< char * >( &integer2 ), sizeof( integer2 ));
   
   while ( inFirst && inSecond ) {
      if ( integer1 < integer2 ) {
         outThird.write( ptr_cast< const char * >( &integer1 ), sizeof( integer1 ));
         inFirst.read( ptr_cast< char * >( &integer1 ), sizeof( integer1 ));
      } else {
         outThird.write( ptr_cast< const char * >( &integer2 ), sizeof( integer2 ));
         inSecond.read( ptr_cast< char * >( &integer2 ), sizeof( integer2 ));
      }
   }
   
   while ( inFirst ) {
      outThird.write( ptr_cast< const char * >( &integer1 ), sizeof( integer1 ));
      inFirst.read( ptr_cast< char * >( &integer1 ), sizeof( integer1 ));
   }
   
   while ( inSecond ) {
      outThird.write( ptr_cast< const char * >( &integer2 ), sizeof( integer2 ));
      inSecond.read( ptr_cast< char * >( &integer2 ), sizeof( integer2 ));
   }
   
   return 0;
}
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 145
17.04.2013, 22:51  [ТС]     Объединение двух бинарных файлов #3
Toshkarik, спасибо большое. только желательно чтоб было без использования всего что содержит "< >" template, ptr_cast и т.д. такие дужки... просто мы такое только-только начинаем учить и то очень минимально, если такую программу напишу меня не поймут..
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
18.04.2013, 06:48     Объединение двух бинарных файлов #4
gorus95, замените просто везде ptr_cast<>(..) на то что внутри функции или на такого вида конструкцию:
C++
1
inFirst.read( reinterpret_cast< char * >( &integer1 ), sizeof( integer1 ));
после чего просто удалите шаблон.
А без приведения типа здесь никак, или reinterpret_cast, или два static_cast ( что все же лучше будет ).
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 145
18.04.2013, 12:24  [ТС]     Объединение двух бинарных файлов #5
Toshkarik, понятно, спасибо.
Yandex
Объявления
18.04.2013, 12:24     Объединение двух бинарных файлов
Ответ Создать тему
Опции темы

Текущее время: 23:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru