IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Замена строки в файле
Unconnected
сообщение 4.08.2009 13:51
Сообщение #1


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Привет всем.

Нужно написать программу, которая заменяла бы в другом файле одну строку на другую, в смысле именно внутри файла. Нашёл код, который это делает, но там условие, чтобы заменяемая и заменяющая строки были одной длины, а мне надо, чтобы заменяющая строка могла быть больше... В принципе, можно сделать, чтобы заменяемая строка была дополнена сторонними символами, пробелами, например, а при замещении при надобности их удалять. Но, может быть, можно при замещении большей строкой "сдвигать" оставшуюся часть файла?


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 10)
amega
сообщение 4.08.2009 14:10
Сообщение #2


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


а такой вариант не подойдет что б, скопировать сожрежимое файла в память, заменить нужно и перезаписать файл?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 4.08.2009 14:19
Сообщение #3


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Ну так и будет, или почти так. Вопрос в соответствии длин строк. Попробуй открыть какую нибудь программа HEX-редактором, чтобы нагляднее было, что там внутри:)


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.08.2009 14:51
Сообщение #4


Гость






Это смотря какой файл (в смысле, формат файла). Может случиться, что даже при замене строк равной длины ты получишь проблемы (скажем, если считается CRC, или что-нибудь еще).
 К началу страницы 
+ Ответить 
Unconnected
сообщение 4.08.2009 14:58
Сообщение #5


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Цитата
Это смотря какой файл (в смысле, формат файла). Может случиться, что даже при замене строк равной длины ты получишь проблемы (скажем, если считается CRC, или что-нибудь еще).


А, ну EXE, ничем не упакованный, без проверки контрольной суммы..


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.08.2009 20:34
Сообщение #6


Гость






А ты попробуй заменить строку на другую через какой-нибудь Resource Editor, или ResHacker, что-то в этом роде. Я к тому, что строка в EXE-файле она ведь тоже по-разному может представляться. Если с помощью вышеперечисленных программ удалось, то можно попробовать и вручную сделать то же самое. Программа, в которой надо что-то менять, твоя или чужая? (я к тому, что если чужая - то почему ты уверен, что она неупакована, и всегда будет таковой?)

Еще один вопрос: Может, проще менять не в файле, а после запуска найти нужный контрол и там поменять текст? smile.gif
 К началу страницы 
+ Ответить 
Unconnected
сообщение 5.08.2009 11:01
Сообщение #7


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Ну, с помощью WinHEX'а получилось. Программа моя, поэтому искомый заменяемый текст будет жёстко задан.
И надо, чтобы именно создавался с определённой строкой. Создать можно с помощью ресурса, а как так заменить, я не знаю..


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.08.2009 12:43
Сообщение #8


Гость






Цитата
Создать можно с помощью ресурса, а как так заменить, я не знаю..
См. здесь: Sources.RU -> Добавление ресурса
 К началу страницы 
+ Ответить 
Unconnected
сообщение 5.08.2009 13:17
Сообщение #9


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Цитата
Создать можно с помощью ресурса, а как так заменить, я не знаю..
См. здесь: Sources.RU -> Добавление ресурса


Я, наверное, не так выразился.. Как добавить ресурс, и извлечь его, я знаю, мне надо программно заменить в другом файле строку.


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.08.2009 13:40
Сообщение #10


Гость






Ты по ссылке-то пройди (то, что ты не был там, я вижу, ты говоришь, ориентируясь на НАЗВАНИЕ, а не на СОДЕРЖАНИЕ smile.gif )
 К началу страницы 
+ Ответить 
Unconnected
сообщение 8.08.2009 17:50
Сообщение #11


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


В итоге получилось следующее:) Через HEX-редактор я нашёл в файле адрес нужной строки(в изменяемой программе эта строка предварительно была дополнена пробелами, чтобы был запас длины) и в "билдере" патчил файл побайтно.


var f:thandle;
fils:integer;
mes:string;
i:integer;
c:byte;
BytesRead,c2:DWORD;
begin
mes:=smemo1.text;
c2:=$5C64;
for i:=1 to length(mes) do
begin
c:=ord(char(pchar(mes[i])));
SetFilePointer(f, c2, nil, 0);
WriteFile(f, c, SizeOf©, BytesRead, nil);
inc(c2);
end;
end;


Хорошо, что оказался возможным инкремент DWord'а.


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 8.07.2025 13:34
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"