![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| segmentation_fault |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 14.2.2005 Где: в интернете Репутация: 1 Всего: 1 |
Недавно написал небольшой код который должен разделить бинарный файл на два файла и потом 'склеить' его обратно. Попробовал на экзешнике - программа работает, файл делит и склеивает, но экзешник потом не работает. Не подскажете, где я тут ошибся?
Вот код который делит:
А вот который обратно соединяет:
|
||||
|
|||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
И в первой, и во второй программе одна и та же ошибка: ты, сразу после считывания байта из входного файла, начинаешь им манипулировать, записывая его в выходной... в то время как это может быть уже не очередной считанный байт, а значение EOF, с которым делать ничего не надо... исправить это "в лоб" можно, например, так:
а, вообще, реализация довольно кривенькая... -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
А ты посмотри на два файла, которые у тебя после деления получились в Norton Commander'e и если они в сумме их размеров не дают размер исходного файла, то ты уже поделил неправильно.
Если сумма правильная, то смотри на размер того, что получилось в итоге. Опять же если в итоге размер файла не тот, то ошибка в склеивании. Если размеры правильные, то значит ты разделил/слепил с определенными значениями, но при этом записал всякую ерунду в файлы. А вообще для того, чтобы побайтно сравнить два файла есть (в том же Norton'e Commander'e) комманда fc. Пишешь fc /b 1файл 2файл > 3файл В 3файл получаешь результат побайтового сравнения. Если в файле будет написано, что различия не найдены, то все разделилось/слепилось правильно. Действуй! Добавлено @ 23:50 Немного опоздал с советом, но ничего... -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| segmentation_fault |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 14.2.2005 Где: в интернете Репутация: 1 Всего: 1 |
BreakPointMAN, тут ты конечно прав, но программа всё равно не работает, проблема в чем-то еще.
Буду рад услышать любую конструктивную критику. cardinal Спасибо, но Нортон Коммандером не пользуюсь. Просто просматривая свойства файлов получается что склеенный файл на два байта больше чем он должен быть. Откуда они берутся, непонятно |
|||
|
||||
| LPBOY |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
BreakPointMAN прав!
Попробуй так.
--------------------
Каждый человек по-своему прав, а по-моему нет... |
||||
|
|||||
| BreakPointMAN |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
оттуда и берутся!.. ты же в них еще два раза значение EOF пишешь!.. Добавлено @ 00:23
ты все ошибки исправил? у тебя 1 ошибка в 3-х экземплярах, в обоих файлах!.. ну, а если всё равно не работает - потести под отладчиком... уверен, сразу наткнешься на ошибку, если есть такая... -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
||||
|
|||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
Я тоже им обычно не пользуюсь, но иногда его очень полезно иметь. Попробуй описанным выше методом найти ошибки, а потом их исправить. Заодно поймешь в какой момент лишние байты появляются... -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
а, собственно, причем здесь Norton Commander?
fc - это вроде как стандартная программа в Windows... -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| segmentation_fault |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 14.2.2005 Где: в интернете Репутация: 1 Всего: 1 |
Могу подтвердить, что FC работает и в обычном ДОС-окошке. Что касается программы, то вроде уже во все циклы вставил проверку на ЕOF, то же результат. Да бог с ним, завтра прогоню программу под отладчиком, будет ясно. Спасибо всем кто ответил.
|
|||
|
||||
| Chaos A.D. |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
Вот очень лаконичный и наглядный способ решения твоей задачи (привел только кусок кода, надеюсь все и так станет ясно) :
Правда наглядный он только для тех, кто хорошо знает STL. Но зато очень коротко. И никаких циклов. Это сообщение отредактировал(а) Chaos A.D. - 27.10.2005, 13:12 --------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |