Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];

Вниз

Сохранение данных в EXE   Найти похожие ветки 

 
Kon   (2002-03-23 01:50) [0]

Не подскажет ли кто-нибудь из уважаемых мастеров, как сохранять некоторые данные в самом EXE-файле исполняемой программы. И как их при ее запуске считывать? Спасибо.


 
wicked   (2002-03-23 02:13) [1]

насколько я понял, ты пишешь программы под windows... тогда ответом будет "никак", так как операционка блокирует на запись и удаление исполняемый файл программы...
как альтернатива - можно записывать в реестр, он для того и создан...


 
Kon   (2002-03-23 02:22) [2]

То есть я не могу хранить какой-нибудь ARRAY, описанный в теле программы, в ее файле,а как же тогда сохраняются файлы с данными компонентов ClientDataset в самом EXE???


 
McLaren   (2002-03-23 09:25) [3]

Создавай дополнительный процесс, который дождется завершения твоей проги, потом запишет в ехе шник и закроется.


 
perov   (2002-03-23 09:32) [4]

данные можно хранить в ресурсах
и даже есть функции для сохранения ресурсов
но я ими не пользомался, так что экспериментируй... :)


 
Anatoly Podgoretsky   (2002-03-23 09:35) [5]

Можешь все хранить, только закрой сначала программу.


 
Alex_LG   (2002-03-23 17:44) [6]

IMHO чел спрашивает КУДА КОНКРЕТНО всё это запихнуть можно (ресурсы там, заголовой exe-шника или что там ещё есть...), и при помощи КАКИХ ИМЕННО функций/процедур потом это считывать? А записывать собирается с помощью другой утилы.


 
Kon   (2002-03-24 12:05) [7]

Совершенно верно. Ведь Delphi позволяет хранить, например, изображения в самом теле EXE. Как этого же добиться для своих данных.


 
lipskiy   (2002-03-24 14:03) [8]

Я пробовал делать такую вещь. Работает, но сам алгоритм некрасивый и кривой.
При запущенном ехешнике его самого можно скопировать рядом с другим именем. Приписать к этой копии в конец любой кусок данных (проверял - ехешник все равно работать будет). Перед завершением программы создать батник, который удалить основной ехешник, и переименует копию в основной. При следующем запуске можно считать данные как обычные бинарные.
Правда антивирусники могут ругаться на такие файлы с дописками - подозревают их на зараженные, что, в общем-то, недалеко от истины :)


 
Alex_LG   (2002-03-24 14:09) [9]

как считывать - по моему, можно сделать так: в начале блока своих данных ставишь какую-то метку - скажем, переменную String="MyLabel" ; потом уже из самой программы во время исполнения открываешь самого себя (ехе-шник) и ищешь эту метку - после неё соответственно идут твои данные
а в коде прсто место под них забей - после этой самой метки
тогда при чтении blockread читай впеременную такого же типа

а вот КУДА ЗАПИСЫВАТЬ и КАК МЕСТО ПОД ЗАПИСЬ найти - этого не знаю, могу предположить два варианта: либо в заголовок ехе-шника, либо в место ресурсов, место под которые опять же забей {$R ресурс.RES} опять же в начале ресурса - метка

короче - примерно такие идеи. сам не пробовал, хотя и собираюсь


 
Alex_LG   (2002-03-24 14:12) [10]

2lipskiy:
записывать кстати можно ещё создавая длл-ку и запуская её через rundll32.exe - так же можно и потереть самого себя


 
stexen   (2002-03-24 15:09) [11]

Да взял че надо и записал на конец потом считал нормально должно работать


 
DenKop   (2002-03-24 15:22) [12]

В закрытый EXE записывается так:
procedure TForm1.Button1Click(Sender: TObject);
var
FileHandle:integer;
s:string[10];
begin
if edit1.text<>"" then
begin
s:=edit1.Text;
FileHandle := FileOpen("1.exe",fmOpenReadWrite);
FileSeek(FileHandle,SizeOf(s),2);
FileWrite(FileHandle,s,SizeOf(s));
FileClose(FileHandle);
end;
end;

А читается так:
procedure TForm1.Button2Click(Sender: TObject);
var
FileHandle:integer;
s:string[10];
begin
FileHandle := FileOpen("1.exe",fmOpenReadWrite);
FileSeek( FileHandle,-SizeOf(s),2);
FileRead(FileHandle,s,SizeOf(s));
ShowMessage(s);
FileClose(FileHandle);
end;

Ну а для сохранения array вместо SizeOf(s) вставляешь
SizeOf(a[1])*KolvoElementovMassiva
Так способ годится только для сохранения массивов стандартных типов (Integer,Real,String etc.) для структурированных типов не проверял.


 
Kon   (2002-03-25 01:13) [13]

Спасибо всем, но уж больно все как-то коряво (это не претензия ко всем сочувствующим, а просто странно, что нет ничего проще)


 
Suntechnic   (2002-03-25 07:03) [14]

Что то я не понял о чём этот флейм? Человеку не надо изменять данные, ему надо их просто хранить, так по крайней мере следует из вопроса, тогда ответ один: ресурсы.

>Kon (25.03.02 01:13)
Да всё на самом деле не так уж и сложно. Если тебе не надо менять эти данные, тогда ресурсы это то, что тебе надо. Ресурсы на самом деле это всего лишь бинарные данные, т.е., естественно, они могут быть такими, какими ты их сам захочешь видеть. Стандартные типы ресурсов существуют только для облегчения работы с наиболее часто используемыми ресурсами. Всё что тебе надо, это создать свой тип ресурса и положить туда свои данные, а дальше работать с ними с помошью API ф-ций
FindResource, FindResourceEx, LockResource, LoadResource или можно использовать для этих целей класс TResourceStream. Но опять же повторюсь, данные будут доступны только для чтения.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.005 c
1-9557
olookin
2002-03-24 15:21
2002.04.04
TChart иногда ведет себя странно


6-9591
OGR
2002-01-23 11:41
2002.04.04
Как подавить сообщения об ошибках в TWebBrowser?


1-9463
Mummi
2002-03-25 14:48
2002.04.04
В ячейке StringGrida есть слово. Как узнать в какой позиции слова стоит курсор? (типа свойства SelStart)


14-9607
VuDZ
2002-02-18 04:05
2002.04.04
Сравнение компиляторов - часть 2


1-9546
SemenK
2002-03-24 11:05
2002.04.04
КАК СОЗДАТЬ ФОРМУ ОТПРАВКИ ПИСЬМА ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский