Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание кода программы, Чтение и запись файла в код программы 
V
    Опции темы
Bima
Дата 25.8.2006, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ситуация такая:
Нужно в программе создать блок, который бы на поле Мемо, или какое другое выводил файл в виде массива.
Во второй программе (в коде) нужно этот массив назад преобразовать в файл.

Что бы понять ситуацию яснее, объясню на примере. Есть текстовый файл (программа должна обрабатывать любые файлы), я его открываю первой программой и она в поле Мемо показывает мне код типа такого:

Код

char StrMain[154]=... // здесь должны быть коды файла


Я этот код вставляю во вторую программу и она мне по нажатию на определенную кнопку делает точно такой же файл в указаном месте.

Может, кто сталкивался с такой проблемой?


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
Gordon
Дата 25.8.2006, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А если просто скопировать файл?


--------------------

  
     
PM MAIL WWW   Вверх
Bima
Дата 25.8.2006, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



На другом компьютере, где будет работать вторая программа, это файла не будет!
Он должен сам создаться (один в один)


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
Artemon
Дата 25.8.2006, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

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



Используй именованные каналы или сокеты.
поиск по google


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Bima
Дата 25.8.2006, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Блин, что мне теперь для этого сеть создавать?

А если на компьютере сети нет. Вариант домашнего???


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
586
Дата 25.8.2006, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Код
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------

char *pMem=0;
DWORD cb;

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 LARGE_INTEGER li;
 DWORD dwRead;
 if(OpenDialog1->Execute())
 {
  HANDLE f=CreateFile(OpenDialog1->FileName.c_str(), GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
  if(f==(HANDLE)-1)
  {
   MessageBoxA(Handle, SysErrorMessage(GetLastError()).c_str(), "Failed to open file", 16);
  } else {
   GetFileSizeEx(f, &li);
   cb=li.LowPart;
   pMem=new char[cb];
   ReadFile(f, pMem, cb, &dwRead, 0);
   CloseHandle(f);
  }
 }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
 DWORD dwWritten;
 if(SaveDialog1->Execute())
 {
  HANDLE f=CreateFile(SaveDialog1->FileName.c_str(), GENERIC_WRITE, FILE_SHARE_READ, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
  if(f==(HANDLE)-1)
   MessageBoxA(Handle, SysErrorMessage(GetLastError()).c_str(), "Failed to save file", 16);
  else {
   WriteFile(f, pMem, cb, &dwWritten, 0);
   if(!dwWritten)
    MessageBoxA(Handle, SysErrorMessage(GetLastError()).c_str(), "Failed to write file", 16);
   CloseHandle(f);
  }
 }
}

После нажатия кнопки Button1 у тебя будет массив байт pMem и его размер - cb. Чего хочешь с ним - то и делай.
PM   Вверх
Bima
Дата 25.8.2006, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Все замечательно.
Функций ввода вывода очень много, что-то подобное я сам написал, вот только при выводе на экран (Мемо) они будут отображаться совсем по другому, и если их вставить в КОД программы (хочу подчеркнуть именно в код второй программы), то при записи этого массива будет различаться с исходником.

То есть в том коде, что был в предыдущем топике все нормально, но основная проблема: преобразовать массив в удобочитаемый код, который потом легко можно было преобразовать обратно в массив.


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
586
Дата 25.8.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Цитата(Bima @  25.8.2006,  14:36 Найти цитируемый пост)
удобочитаемый код

hex dump?
PM   Вверх
Bima
Дата 25.8.2006, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



то есть?
Цитата

hex dump

можно примерчик в студию
хотя бы в общих чертах


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
586
Дата 25.8.2006, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Цитата(Bima @  25.8.2006,  14:55 Найти цитируемый пост)
то есть?

как в hex-редакторе
00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

PM   Вверх
Bima
Дата 25.8.2006, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну что то в этом виде....
Если можно будет его перевести (я пишу про массив) из char в hex и потом обратно, то этот вариант подойдет.

У кого нибудь есть идеи как это сделать?
можно конечно по символу брать
Код

Sprintf (a "%h" pMem[i]);

Но мне кажется это будет долго, и я не знаю, как назад преобразовать в массив.
к тому же, как этот дамп записывать в коде программы?


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
586
Дата 25.8.2006, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Цитата(Bima @  25.8.2006,  15:32 Найти цитируемый пост)
как назад преобразовать в массив
А для чего это?

Цитата(Bima @  25.8.2006,  15:32 Найти цитируемый пост)
как этот дамп записывать в коде программы? 
Не понял

Это сообщение отредактировал(а) 586 - 25.8.2006, 14:37
PM   Вверх
Bima
Дата 25.8.2006, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну допустим делаю я инстолятор (на самом деле это не так, но задача похожа). Мне в одной программе (далее по тексту я буду называть ее "второй") нужно, что бы программа сама из себя создала несколько файлов. То есть в самом коде программы должны быть присутствовать данные всех файлов (не только текстовых).
Для этого "первая программа" должна подготовить данные для второй программы.

версии копирования и распаковки файлов не подойдут. Архиваторы тоже не подходят, по независящи от меня условиям.


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
586
Дата 25.8.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Цитата(Bima @  25.8.2006,  15:43 Найти цитируемый пост)
нужно, что бы программа сама из себя создала несколько файлов. То есть в самом коде программы должны быть присутствовать данные всех файлов (не только текстовых).

Цитата(Bima @  25.8.2006,  09:04 Найти цитируемый пост)
Нужно в программе создать блок, который бы на поле Мемо, или какое другое выводил файл в виде массива.

Зачем тогда его в Memo выводить и делать такое непонятное преобразование??

Цитата(Bima @  25.8.2006,  15:43 Найти цитируемый пост)
Для этого "первая программа" должна подготовить данные для второй программы.

Это как?

Это сообщение отредактировал(а) 586 - 25.8.2006, 14:48
PM   Вверх
Bima
Дата 25.8.2006, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Зачем тогда его в Memo выводить??


вот допустим есть текстовый файл, который имеет внутри все три цифры - "123"
первой программой я читаю его и она у меня формирует строку в Мемо:
Код

char StrMain[3]="123"; 


потом при разработке второй программы я вставляю ее (полученную строчку) в код программы. После этого, вторая программа запишет этот массив StrMain в файл, который не будет отличаться от того, который я считывал первой программой.

Это все я рассказал на примере текстового файла. Но если взять исполняемый файл, там есть не печатанные символы, их Мемо не поймет. В результате, файл создастся не такой, как оригинальный.


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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