Radiohobby Forum

Интернет конференция журнала "Радиохобби"

Вы не вошли.

Объявление

Подписка на новые материалы от Николая Сухова - ролики, схемы, модели, онлайн конференции, консультации, чат.

Внимание! Почта в доменах Яндекс и Mail.ru не будет работать в профилях форумчан, из-за введённых правительством Украины санкций против этих компаний. Всем, кто ранее использовал подобную почту, для сохранения прежней функциональности форума, рекомендуется её поменять.

Огромная просьба, заливать тематические картинки и файлы в личные файловые каталоги на форуме, чтобы они не потерялись, со временем!

Ссылка "Загрузки" находится справа внизу формы набора сообщения.

Подписка на журнал "Радиохобби" прекращена. Подробности. Форум же - продолжает свою работу.

#1 07.09.2004 20:31:55

Vasil
Ветеран
Откуда: близ Киева
Здесь с 23.01.2004
Сообщений: 1,159

Builder 5 кто работает? подмогните чайнику

сразу предупреждаю, абсолютный "0".
нужно работать с файлами, как просто с некоторым набором  данных(байтов), после этого сохоранить результ обработки в другом, вновь созданном файле (размер выходного файла 1-2 МВ
вопрос?
как , с какими может компонентами к этому подступиться?

Вне форума

#2 07.09.2004 22:12:26

Liv
Ветеран
Откуда: Минск
Здесь с 08.02.2004
Сообщений: 1,233

Re: Builder 5 кто работает? подмогните чайнику

Используете Open Dialog для получения имени файла, который открываете:

  if(OpenDialog->Execute())
   { Name = OpenDialog->FileName; MyFileOpen(Name); }

В функции MyFileOpen используем следующее:

ifstream file(Name.c_str(), ios::binary); - создаем ifstream

file.read((char *)Data, sizeof(Data)); - читаем данные

file.close(); - закрываем файл

При сохранении используем Save Dialog для получения Name,

ofstream file(Name.c_str(), ios::binary); - создаем ofstream

for(int i=0; i<sizeof(Data); i++) file << Data[i]; - записываем данные

file.close(); - закрываем файл

Вне форума

#3 07.09.2004 22:29:34

Vasil
Ветеран
Откуда: близ Киева
Здесь с 23.01.2004
Сообщений: 1,159

Re: Builder 5 кто работает? подмогните чайнику

Liv, спасибо, примерно чтото подобное пробовал делать, только не совсем понимая что.. . попробую разобраться в Вашем примере.
Формально подхожу по старинке(РК86,ZX-Spectrum),(как к дампу),
->загрузил в ОЗУ,-> отредактировал,(вручную, или программно),
->сдвинул данные,если нужно, скажем первых N байт удаляется,-> сохранил в новом(причем таких обработано/объединяемых файлов может быть N штук- объединенных в один, назовем его*.bin), ну и еще там чего то , но это уже не принципиально, дело техники, вот с чем к этому подойти ,пока хожу вокруг этой глыбы (:

Отредактировано Vasil (07.09.2004 22:38:32)

Вне форума

#4 08.09.2004 00:46:50

PM
Новичок
Здесь с 07.09.2004
Сообщений: 19

Re: Builder 5 кто работает? подмогните чайнику

Честно признаюсь, гулял с подругой, напипились пива... потому и пишу, впрочем smile)
но все должно работать, тем не менее. smile
Правильность имен функций гарантирую, а вот порядок следования аргументов могу и перепутать. Просьба посмотреть в хэлпе.

AnsiString FName = "input.file";// имя файла с исходными данными
int FHandle, FSize;// дескриптор файла и размер файла
BYTE *inbuf, *outbuf; //будут динамические буферы для данных

FHandle = FileOpen(FName, fmOpenRead);//открыли исходный файл для чтения
FSize = FileSeek(FHandle,0,2);// нашли размер исходного файла - просто получили значение файлового указателя при ео положении в конце файла
FileSeek(FHandle,0,0);//вернулись обратно в начало файла
inbuf = new BYTE[FSize];//выделили в памяти место под буфер для исходного файла
FileRead(FHandle,inbuf,FSize);//прочли файл в буфер
FileClose(FHandle);//закрыли дескриптор

int tmp = 5;//просто переменная. здесь - смещение указателя в исходном массиве от его начала
outbuf = new BYTE[FSize-tmp];//создали буфер под обработанные данные
memcpy((BYTE*)(&inbuf[tmp]),outbuf);//скопировали данные из исходного буфера, начиная с байта inbuf[tmp], в буфер результата.

FName = "output.file";//задали имя файла результата
FHandle = FileCreate(FName);// создали файл. Если существовал - перетрется
FileWrite(FHandle,outbuf,FSize-tmp);// записали результат в файл
FileClose(FHandle);//закрыли дескриптор

delete[] inbuf; //очищаем выделенную память
delete[] outbuf;

Естественно, очень желательно отлавливать возможные исключения.
В данном коде получаем байтовый массив, с которым можно делать что угодно.
Думаю, особых трудностей не должно возникнуть. Нужно сцепить несколько обработанных файлов - делаете нужное количество буферов, обрабатываете, создаете результирующий буффер суммарного размера и пишите в него последовательно. Или можно сразу открыть результирующий файл и писать прямо в него, не выделяя буффер под результат в памяти.
В принципе, это элементарные операции с файлами и указателями. Просто не поленитесь и уясните, что такое указатели, их связь с массивами, арифметику указателей, преобразование типов. Тогда С станет лучшим из многих.
Как только разберетесь с классами, С++ станет для Вас лучшим из всех. smile

Вне форума

#5 08.09.2004 00:59:18

PM
Новичок
Здесь с 07.09.2004
Сообщений: 19

Re: Builder 5 кто работает? подмогните чайнику

да, замеченные ошибки smile
в memcpy есть еще третий аргумент, указывающий количество байт, которые нужно скопировать.
Одним словом, обязательно проверьте по хэлпу, в Билдерах он отличный.
Кста, использовать sizeof для определения размера динамических массивов не советую.
В Билдере он загадочным образом может то работать, то нет. для статических, для классов(структур) - без вопросов, все идеально. smile

Вне форума

#6 08.09.2004 07:54:46

Vasil
Ветеран
Откуда: близ Киева
Здесь с 23.01.2004
Сообщений: 1,159

Re: Builder 5 кто работает? подмогните чайнику

ну, целая поэма -:), еще раз спасибо, и что не поленились прокомментировать. Накачал тут книг, завалился ими, но "негритята" как то раздражают, хочется реальную задачу(как для меня) решать, только определиться еще нужно, в каком я сам класе -:)
ЗЫ, честно говоря, долго не решался задАть вопрос и особо не рассчитывал на ответ (наверное мне повезло-:)), вобщем, весьма признателен ответившим

Отредактировано Vasil (08.09.2004 08:16:45)

Вне форума

#7 08.09.2004 09:55:31

PM
Новичок
Здесь с 07.09.2004
Сообщений: 19

Re: Builder 5 кто работает? подмогните чайнику

Если будут ну совсем уж неразрешимые трудности, обращайтесь. smile
Аська 199923436.

Вне форума

#8 08.09.2004 12:04:55

Vasil
Ветеран
Откуда: близ Киева
Здесь с 23.01.2004
Сообщений: 1,159

Re: Builder 5 кто работает? подмогните чайнику

спасибо, не хотелось бы злоупотреблять, разве что если будут ну совсем уж, НУ-, тут еще "над собой" работать и работать(:-

Вне форума

#9 08.09.2004 13:51:33

Jaxon
радиолюбовник
Откуда: Николаев
Здесь с 22.01.2004
Сообщений: 3,019

Re: Builder 5 кто работает? подмогните чайнику

злоупотребляй. поможет smile

Вне форума

#10 21.09.2004 12:26:42

Sugar
Участник
Откуда: Луганская, Донецкая обл.
Здесь с 19.05.2004
Сообщений: 190
Сайт

Re: Builder 5 кто работает? подмогните чайнику

Намчет примера Liv это подход от старенького досовского Borland C++ Turbo 3.0 данный способ хорош, только уж сильно старенький.
Не рекомендую его использовать если пишите на Builder под Windows.
Насчет примера от PM то єто подход WIN API.
memcpy это тоже старинка
FileCreate
FileWrite
FileClose
Я не сторонник и єтого способа, ну зачем тебе єти Create и прочее.
Если ты только начинаешь разбираться испольуй простенькие методы
LoadFormFile
SaveToFile
Тох же Memo, RichEdit, ListBox или что-то в єтом духе.
Простенько и со вкусом,
И применять динамическое создание переменных, и простенькое удаление delete крайне не рекомендую, есть такоя штука, назівается "утечка памяти", скорее всего если использовать этот пример узнаешь что это такое.
Да к примеру Liv если работаете с бинарными файлами, то  в качестве Data можно использовать структуру, но это я думаю сложновато для тебя.

Вне форума

Сейчас в этой теме пользователей: 0, гостей: 1
[Bot] ClaudeBot

Подвал форума

Под управлением FluxBB
Модифицировал Visman

[ Сгенерировано за 0.031 сек, 7 запросов выполнено - Использовано памяти: 600.93 Кбайт (Пик: 651.3 Кбайт) ]