Скопировать файл | |
---|---|
leonid Сообщений: 3202 Откуда: Рига Дата регистрации: 03.02.2006 |
В прилагаемом архиве находятся экзешник test.exe, табличка test и база данных test. Известно, что в экзешнике имеется включенный файл test.txt. Задача - скопировать этот файл на диск с именем _test.txt. Экзешник при этом изменять не разрешается. Разрешается изменять таблицу и базу данных. Из сторонних средств разрешается использовать только сам фокс.
|
Re: Скопировать файл | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
Боюсь разочаровать, но
------------------ WBR, Igor |
Re: Скопировать файл | |
---|---|
leonid Сообщений: 3202 Откуда: Рига Дата регистрации: 03.02.2006 |
Да, Игорь, каюсь, об этом не подумал. Но давай, немного усложним задачу. Предположим, что экзешник из IDE по какой-либо причине не запускается. Ну, скажем, стоит в начале что-нибудь вроде
|
Re: Скопировать файл | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
Ну тады в DBC прописать эту же строку.
P.S. Есть какая-то тонкость в том как фокс даёт доступ файловым функциям ко "включенным" файлам - т.е. если прописать вызов внешнего fxp, то он уже не видит файла. Кажись и прямое прописывание STRTOFILE(FILETOSTR("test.txt"),"_test.txt") во "внешнем" dbc файле не проходит - а вот через ON KEY LABEL - работает. Наверное будет работать и через меню - если создать пункт и цеплянуть к нему команду (не вызов процедуры). ------------------ WBR, Igor |
Re: Скопировать файл | |
---|---|
leonid Сообщений: 3202 Откуда: Рига Дата регистрации: 03.02.2006 |
Игорь, а вот мимо этого способа я прошел. А все потому, что писал немножко не так:
полагая, что это то же самое. Но так не работает. Объяснить это наверное можно тем, что dbc_OpenData после выполнения прописанного кода делает еще что-то вроде doevents. А вот если мой код вставить в триггер, и вызвать его, то все работает на ура. Это, собственно, и есть мое решение. Цитата:Да ради бога. Допустим, имеется список файлов, включенных в экзешник. Находится он в таблице
Цитата: Эта задачка - как раз плод попытки разобраться в этих тонкостях. |
Re: Скопировать файл | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
В БД
В файле h1.prg (надо откомпилировать перед запуском test.exe)
------------------ WBR, Igor |
Re: Скопировать файл | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
Модифицируем код Игоря в стиле, уже однажды тут обсуждавшемся:
------------------ Лень - это неосознанная мудрость. |
Re: Скопировать файл | |
---|---|
leonid Сообщений: 3202 Откуда: Рига Дата регистрации: 03.02.2006 |
У меня было
Ну, тогда последний вопрос (на мой взгляд, самый легкий). А как получить список файлов, которые включены в экзешник? Исправлено 1 раз(а). Последнее : leonid, 04.09.09 15:53 |
Re: Скопировать файл | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
Честно говоря, я всегда предполагал что это самый тяжёлый вопрос - от того и нужно в известном дампере vh сканирование памяти - неужели есть какой-то простой/прямой способ? ------------------ WBR, Igor |
Re: Скопировать файл | |
---|---|
leonid Сообщений: 3202 Откуда: Рига Дата регистрации: 03.02.2006 |
Игорь, может в техническом плане этот вопрос и сложнее, но в идейном он был для меня самым простым. В отличие от других вопросов, я с самого начала представлял путь, по которому надо идти. В итоге покопался в MSDN, выкопал функции GetProcessHeaps (не GetProcessHeap), HeapWalk, ну еще понадобилась функция IsBadReadPtr. Затем вся рабочая память экзешника копируется в курсор и изучается на предмет нахождения интересующей области. Особая примета: Sys(16,0). После этого пишется простенький парсер и все. Кода у меня сейчас под рукой нет, да думаю в нем и нет необходимости.
|
Re: Скопировать файл | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
А, ну то понятно... Правда наверняка есть нюансы при подключении разных app/dll - могут ведь и дублироваться имена... Мне кажется что vh примерно по тем-же принципам работает - разве что не только кучи проходит, а вообще всю память...
Кстати, фокс разве полностью таблицу файлов считывает? Мне казалось что он кусками её читает - при том "пока не будет найдёно искомое"... Хотя и не могу гарантировать, настолько глубоко в процесс чтения app не погружался ------------------ WBR, Igor |
Re: Скопировать файл | |
---|---|
leonid Сообщений: 3202 Откуда: Рига Дата регистрации: 03.02.2006 |
Мне кажется, у других app/dll списки файлов будут в других отрезках, возращаемых HeapWalk, и их можно искать по пути и имени app/dll, только непонятно, что с полученным списком потом делать. Цитата:По-моему, да. По крайней мере мне всегда удавалось получить весь список, даже для довольно больших экзешников. Вот код, с которым можно поэкспериментировать.
|
Re: Скопировать файл | |
---|---|
Igor Korolyov Автор Сообщений: 34580 Дата регистрации: 28.05.2002 |
Да, прикольно Хотя это уже по большому счёту элементы отладчика...
P.S. Я смотрю, всё ещё на 6-ке трудишься - нет SYS(2600), BINTOC/CTOBIN ------------------ WBR, Igor |
© 2000-2024 Fox Club  |