![]() |
|
Модераторы: bsa |
![]()
|
|
| Alexey68 |
|
||||
|
Alexey ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 10.4.2013 Репутация: нет Всего: нет |
Здравствуйте All
Возник следующий вопрос: при подключении внешней библиотеки (.h) в которой содержится массив типа:
и в дальнейшем записи в файл при размере файла в 200-300 кб, на выходе получаю размер 63,5 кб (65024). А файлы в 20-40 килобайт обрабатываются и создаются с правильным размером. записываю обычно в цикле:
В чём может быть причина? Это сообщение отредактировал(а) Alexey68 - 29.10.2013, 06:57 |
||||
|
|||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
попробуй догадайся из пары строчек кода
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| Alexey68 |
|
|||
|
Alexey ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 10.4.2013 Репутация: нет Всего: нет |
Dem_max, если про цикл то всё как "обычно", даже не знаю... неправильно определяется размер массива?, тогда почему с меншьшим объёмом нет проблем... Это сообщение отредактировал(а) Alexey68 - 29.10.2013, 07:43 |
|||
|
||||
| vinter |
|
||||||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
Alexey68, смотри, созаём файл(file.txt) и копируем в него содержимое:
Теперь открываем файл в hex редакторе, и копируем содержимое из него:
Теперь понятно почему?
У тебя всё с правильным размером, C++ не умеет размер неправильно считать. Смотреть на размер файла последнее дело. Может у тебя там с размером кластера чего или еще что-то. К чему вообще обращать внимание на размер файла? |
||||||||
|
|||||||||
| Alexey68 |
|
||||
|
Alexey ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 10.4.2013 Репутация: нет Всего: нет |
извиняюсь, но что-то не пойму, я изначально из hex редактора копирую в notepad++:
, далее путём замены получаю:
затем сохраняю в заголовочый файл и подключаю его. а далее пишу в цикле новый файл, наверное я изначально не так объяснил последовательность своих действий... Это сообщение отредактировал(а) Alexey68 - 29.10.2013, 08:16 |
||||
|
|||||
| SVN74 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 5.5.2008 Где: Комсомольск на Дн епре Репутация: 1 Всего: 18 |
Есть " int " 16 разряд, а есть 32, а также нет уверенности в том, что "sizeof" делает правильный промер, многое зависит от компилятора.
И вообще зачем применять цикл записи в файл, если можно просто записать весь массив в файл одной строчкой? "char mp_array[] " - лучше через "new" Это сообщение отредактировал(а) SVN74 - 29.10.2013, 10:19 |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
Т.е. у тебя изначальный hex файл 200 кб, не результирующий заголовок?
Если так, то у тебя проблема скорее всего в
Как ты делаешь эту замену? |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Вот. Как файл открывается? Нет ли с ним дополнительных телодвижений? Намёк не понят... Ну, не "строчкой", а массивом. Почему не fwrite? .h - это всё-таки заголовочный файл, не библиотека. В нём прямо вот так и написано:
или как-то иначе? На вид один к одному, под "заменой", наверное, подразумевалось "приведение к C/C++ виду". -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
Если у него заголовок с массивом представлен в том виде, то размер заголовка(физически) будет больше чем сам массив в силу текстового представления данных в файлах исходных кодов C++. |
|||
|
||||
| feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
В виде
??? Он же этот массив в другой файл пихает, байт в байт... Как вот такое может произойти
без дополнительных плясок с файлом? Какая операционка? Как файл открывается/закрывается? Нет ли там fseek где-нибудь? Эти вопросы как были, так и остались неотвеченными... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
| Alexey68 |
|
||||||||
|
Alexey ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 10.4.2013 Репутация: нет Всего: нет |
Благодарю всех откликвнувшихся, и прошу прощения за задержку на вопросы:
вот код:
что я делаю по порядку: 1. Открываю файл в flexhex 2. копирую из него 3. вставляю в notepad++ to Vinter >>Как ты делаешь эту замену? поиск и замена 4. получаю файл вида:
5. сохраняю как mp.h 6. пытаюсь побайтово записать в новый файл (сделать копию) операционка xp Но самое главное что даже без дальнейших манипуляций с массивом (а его размер в заголовочном файле правильный), если получить размер через sizeof, то результат 65024, если указываю
89960 итерации... подсвечивает:
проверил другой файл 460кб (те же операции), всё без проблем. как разберусь с файлом (вышеобозначенный в первом посте) напишу. Это сообщение отредактировал(а) Alexey68 - 29.10.2013, 20:38 |
||||||||
|
|||||||||
| feodorv |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Вот теперь что-то начинает прорисовывается. То есть Вы берёте файл, преобразовываете его содержимое в C-форму в виде массива байт, а затем этот массив сохраняете в другом файле? Где-то я уже видел эту цифру. Ах да:
Вам не приходило в голову, что C (со своей стандартной библиотекой) здесь не причём? Что размер массива реально 65024 байт для любого достаточно большого файла?
Как-то не верится, либо Вы изменили процедуру получения .h-файла, либо в процедуре есть ещё какие-то неведомые подводные камни))) PS Какой размер у .h-файла при возникновении ситуации с 65024 байтами? Это сообщение отредактировал(а) feodorv - 30.10.2013, 02:14 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||
|
|||||||
| Alexey68 |
|
|||
|
Alexey ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 10.4.2013 Репутация: нет Всего: нет |
Всем огромное спасибо и прошу прощения за задержку.
В этом ли причина или нет, но после project-clean main (в меню borland c++) всё работает... короче непонятно, но работает. Ещё раз всем огромное спасибо. С уважением Алексей. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |