Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Функции для записи и чтение своих данных в


Автор: Alex 16.4.2004, 23:49
 Модуль состоит:
1. AppendStringToFile - Дописывает строку к файлу
2. AppendedStringFromFile - Возвращает строку дописаную к файлу процедурой AppendStringToFile

http://alex-co.org/files/delphi/acrw.rar 

Автор: sergejzr 17.4.2004, 00:25
Мы с тобой прям одновременно biggrin.gif biggrin.gif . Та же идея, только на Си
http://forum.vingrad.ru/index.php?act=ST&f=11&t=21225&hl=&view=findpost&p=145794


Автор: Alex 17.4.2004, 08:20
Код был написан в 2002 году smile.gif

Автор: bartram 17.4.2004, 18:32
А примерчик работы с модулем не подкинеш ?

Автор: Alex 17.4.2004, 20:26
 Пример использования 

http://alex-co.org/files/delphi/acrw_example.rar 

Автор: Monty 18.4.2004, 04:54
alex-co что это такое? smile.gif и с чем едят? smile.gif ........ я думал что это исходник может читать(я и сам могу)/записывать в работающий EXE файл biggrin.gif ....... обломал ты меня smile.gif

Автор: Alex 18.4.2004, 08:08
Цитата(Monty @ 18.4.2004, 05:54)
alex-co что это такое? smile.gif и с чем едят? smile.gif ........ я думал что это исходник может читать(я и сам могу)/записывать в работающий EXE файл biggrin.gif ....... обломал ты меня smile.gif

Так, а теперь подумаем, как это возможно записать данные в запущенный файл и поймем, что это сделать нам ни кто, ни даст smile.gif

Автор: Monty 18.4.2004, 22:17
если только самому найти месторасположения программы и записать на диск, в то место где программа, свою информацию самому, а не средствами ОСи smile.gif .... этот прием я знаю давно, но как его осуществить под NTFS? smile.gif

Автор: z-END 19.4.2004, 01:20
alex-co у меня есть штука называется exemod (модуль где-то 30 кб) который позволяет вносить данные в запущенный файлsmile.gif (с ним не разбирался, но он работает)

Автор: Alex 19.4.2004, 06:51
Ну, так выкладывайте свои модули, посмотрим, я поделился своими исходниками, которые были нужны когда-то мне вы поделитесь своими кто против для этого вроде бы тему и создали. А то все сидя и держаться за них также я какому-то ламеру подарю код, который писал и ли искал столько времени, а вы вспомните, что ни так давно вы сами были таким ламером.

А с NTFS он тоже работает?

Автор: Alex 19.4.2004, 07:25
Цитата(nJIaKca @ 19.4.2004, 02:20)
alex-co у меня есть штука называется exemod (модуль где-то 30 кб) который позволяет вносить данные в запущенный файлsmile.gif (с ним не разбирался, но он работает)

Не нужно вводить людей в заблуждение. mad.gif
Элементарный код:
Код
procedure TForm1.Button2Click(Sender: TObject);
begin
 String2File(Edit1.Text, ExtractFilePath(ParamStr(0)) + 'Project1.exe');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Edit2.Text:= File2String(ExtractFilePath(ParamStr(0)) + 'Project1.exe');
end;

При попытки записи происходит таже самая ошибка "невозможно получить доступ к файлу"

Автор: z-END 19.4.2004, 14:45
alex-co А кто говорил что нужно идти прямо в лоб?
Вот вырезка из фака по ExeMod :
....
Цитата
A-In a nutshell, ExeMod is a pascal unit that will let your Delphi programs alter
themselves at runtime
... actually it does not occur at runtime since ExeMod effects
the changes by ejecting a copy of the running exe which then deletes the original exe
and replaces it with a new and altered copy. The temporary copy then shuts down after
running the new exe and passing it a message that tells it to delete the temporary copy.
This sounds a bit whacky but it seems to work just fine. ExeMod also contains many
procedures and functions that make adding data and files to the exe easier... these
can also be used to store data inside external files and other programs.

...
И еще... как раз про NT
Цитата
NT-NOTE!

If you use ExeMod.pas on an NT machine then you may need to run the exe
outside the delphi ide... for some reason NT causes the debugger to
faint at the sight of my code :-)  the exe files run just fine on NT
but just not from inside the ide...

Если заинтересовало, могу его скинутьsmile.gif

Автор: x77 19.4.2004, 15:18
nJIaKca.spb, ты сам читал то, что процитировал? smile.gif

он не пишет в работающий экзешник, а создаёт его изменённую копию, и перезапускает её, а она в свою очередь уничтожает оригинал.

Автор: z-END 19.4.2004, 18:05
x77 c англиским проблемм невозникалоsmile.gif так суть то здесь в этом какая: (по крайней мере я так понял) что че-то добавляешь в экзешник который в данный мометн выполняется, и после добавления экзешник перезпаускется уже измененным но продолжает работать.. а каким способом это сделано не играет особой роли...

Автор: x77 19.4.2004, 18:49
Цитата(nJIaKca @ 19.4.2004, 14:45)
actually it does not occur at runtime since ExeMod effects the changes by ejecting a copy of the running exe which then deletes the original exe and replaces it with a new and altered copy.


речь шла об изменении работающего экзешника. прочитай ещё раз внимательно.

Автор: Alex 19.4.2004, 19:49
Я тащусь biggrin.gif biggrin.gif biggrin.gif

Автор: x77 19.4.2004, 19:53
alex-co, ;)

Автор: sergejzr 19.4.2004, 20:14
Функция alex-co позволяет записать некую информацию в файл, а потом прочитать её.
Какой смысл писать в работающий ексешник?

Автор: Alex 19.4.2004, 22:42
Ну почему же бывают и такие задачи, что требуется дописать какую то информацию к запущенному файлу. Например, сохранение настроек программы в самой себе.

Автор: sergejzr 19.4.2004, 22:50
Вообще то существуют INI, БД итд.
Ну, если кому то надо именно так, то конечно...

Автор: Monty 19.4.2004, 23:04
Но с CD-R будет явный облом =8-)

Автор: bartram 20.4.2004, 17:25
Да, было бы хорошо если бы писалось в открытый эгзешник, и с ini мучиться не надо !!

Автор: sergejzr 20.4.2004, 22:13
Цитата
Да, было бы хорошо если бы писалось в открытый эгзешник...

Круто! На ходу перекрашиваем машину, а заодно меняем мотор biggrin.gif biggrin.gif biggrin.gif biggrin.gif .
ИМХО не может быть в этом ничего хорошего!

Автор: Alex 20.4.2004, 23:12
Цитата(sergej @ 20.4.2004, 23:13)
Цитата
Да, было бы хорошо если бы писалось в открытый эгзешник...

Круто! На ходу перекрашиваем машину, а заодно меняем мотор biggrin.gif biggrin.gif biggrin.gif biggrin.gif .
ИМХО не может быть в этом ничего хорошего!

Все зависит от конкретной задачи

Автор: kazakh 22.2.2006, 11:31
Добрый день.
А так нельзя?

Автор: Peter Below

Вы можете включить любой тип данных как RCDATA или пользовательских тип ресурса. Это очень просто. Данный совет покажет вам общую технику создания такого ресурса.


Код

Type
  TStrItem = String[39];  { 39 символов + байт длины -> 40 байтов }
  TDataArray = Array [0..7, 0..24] of TStrItem;

Const
  Data: TDataArray = (
  ('..', ...., '..' ),  { 25 строк на строку }
  ...                   { 8 таких строк }
  ('..', ...., '..' )); { 25 строк на строку }




Данные размещаются в вашем сегменте данных и занимают в нем 8K. Если это слишком много для вашего приложения, поместите реальные данные в ресурс RCDATA. Следующие шаги демонстрируют данный подход. Создайте небольшую безоконную программку, объявляющую типизированную константу как показано выше, и запишите результат в файл на локальный диск:


Код

program MakeData;
type
  TStrItem = string[39]; { 39 символов + байт длины -> 40 байтов }
  TDataArray = array[0..7, 0..24] of TStrItem;

const
  Data: TDataArray = (
    ('..', ...., '..'), { 25 строк на строку }
    ... { 8 таких строк }
    ('..', ...., '..')); { 25 строк на строку }

var
  F: file of TDataArray;
begin
  Assign(F, 'data.dat');
  Rewrite(F);
  Write(F, Data);
  Close(F);
end.




Теперь подготовьте файл ресурса и назовите его DATA.RC. Он должен содержать только следующую строчку:

DATAARRAY RCDATA "data.dat"
Сохраните это, откройте сессию DOS, перейдите в каталог где вы сохранили data.rc (там же, где и data.dat!) и выполните следующую команду:
brcc data.rc (brcc32 для Delphi 2.0)
Теперь вы имеете файл data.res, который можете подключить к своему Delphi-проекту. Во время выполнения приложения вы можете генерировать указатель на данные этого ресурса и иметь к ним доступ, что и требовалось.


Код

{ в секции interface модуля  }
type
  TStrItem = string[39]; { 39 символов + байт длины -> 40 байтов }
  TDataArray = array[0..7, 0..24] of TStrItem;
  PDataArray = ^TDataArray;
const
  pData: PDataArray = nil; { в Delphi 2.0 используем Var }

implementation
{$R DATA.RES}

procedure LoadDataResource;
var
  dHandle: THandle;
begin
  { pData := Nil; если pData - Var }
  dHandle := FindResource(hInstance, 'DATAARRAY', RT_RCDATA);
  if dHandle <> 0 then
  begin
    dhandle := LoadResource(hInstance, dHandle);
    if dHandle <> 0 then
      pData := LockResource(dHandle);
  end;
  if pData = nil then
    { неудача, получаем сообщение об ошибке с помощью
    WinProcs.MessageBox, без помощи VCL, поскольку здесь код
    выполняется как часть инициализации программы и VCL
    возможно еще не инициализирован! }
end;

initialization
  LoadDataResource;
end.




Теперь вы можете ссылаться на элементы массива с помощью синтаксиса pData^[i,j].

Автор: @ntosha 21.1.2007, 14:25
Караул! Не могу скачать модуль!!! Ошибка типа "Файл отсутствует". Дайте какую нибудь другую ссылку, PLEASE!!!!!

Автор: Dino99rus 22.1.2007, 01:06
сылка битаяsmile
Исправьте плиз...
И тут вопрос задам. Подскажите плиз (или сылку киньте). Я хочу(надо) написать программу которая создает ехе файл с данными, т.е. 1-й ехе может открывать и считывать данные со 2-го ехе или если нет 2-го ехе создать его. Вот например я с помощью 1-го ехе выберу или напишу текстовый файл (или рисунок), после нажатия на кнопку "ок" должен создаться 2-й ехе с этими данными. 2-й ехе должен еще обрабатывать эти данные и при запуски их выводить в зависимости от типа данных.

Или все в одном ехе выполняется, т.е. все дынные могу сохраняться в 1-м ехе. Т.е. должны добавляться, удаться или редактироваться(если это текстовый файл)

Автор: Alex 22.1.2007, 03:21
Все ссылки подправил

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)