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


Автор: 12usver12 29.8.2008, 14:25
Код

procedure TForm1.Button1Click(Sender: TObject);
var
f:file;
i:integer;
begin
AssignFile(f,ParamStr(0));
Reset(f,1);
Seek(f,0);
BlockRead(f,i,sizeof(i));
Showmessage(chr(i));
end;


выдает ошибку I/O 32, это означает нет доступа на чтение ?
возможно ли это решить ?

Автор: BaD_SeCt0R 29.8.2008, 14:46
12usver12, используй апи функцию CreateFile с правами GENERIC_READ для открытия

Автор: Alexeis 29.8.2008, 14:50
  Или TFileStream с параметром fmOpenRead.

Автор: SneG0K 29.8.2008, 15:16
А разве экзешник в процессе работы может читать из себя?

Автор: BaD_SeCt0R 29.8.2008, 15:20
SneG0K, может. Как же, например, по-твоему, читаются ресурсы?

Автор: Alexeis 29.8.2008, 15:27
Цитата(SneG0K @  29.8.2008,  14:16 Найти цитируемый пост)
А разве экзешник в процессе работы может читать из себя? 

  Защита тока на запись.

Автор: SneG0K 29.8.2008, 15:36
Ой точно... Извините за глупый вопрос

Автор: 12usver12 29.8.2008, 15:48
хочу пока попробовать без TFileStream
использую вот такой код , тот же результат , или я что-то не так делаю
Код

begin
CreateFile(pchar(ParamStr(0)), GENERIC_READ or GENERIC_WRITE,  FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
AssignFile(f,ParamStr(0));
Reset(f,1);
Seek(f,1);
BlockRead(f,i,sizeof(i));
Showmessage(chr(i));
end;

Автор: Alexeis 29.8.2008, 15:52
12usver12, CreateFile возвращает хэндл открытого файла. Доступ к нему нужно осуществлять средствами API. Про AssignFile/Reset/Seek/BlockRead можно забыть. Кроме того зачем тут or GENERIC_WRITE это ж открытие с записью.

Автор: 12usver12 29.8.2008, 16:01
спасибо за советы , вопрос думаю решен
CreateFile(...);
ReadFile(...)

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