Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.17;
Скачать: CL | DM;

Вниз

почему не получается Project1.exe отобразить в НЕХ режиме   Найти похожие ветки 

 
orlov ©   (2003-02-08 16:40) [0]

Помогите плиз...
почему не получается "Project1.exe" отобразить в НЕХ режиме
procedure TForm1.Button2Click(Sender: TObject);
var
Buffer: PChar;
Stream: TFileStream;
Size: LongInt;
i:integer;
begin
Stream := TFileStream.Create("Project1.exe", fmOpenRead);
try
Size := Stream.Size;
GetMem(Buffer, Size);
try
Stream.Read(Buffer[0], Size);
for i:=1 to length(Buffer) do
Memo2.Text:=Memo2.Text+format("%x",[ord(Buffer[i])]);
finally
FreeMem(Buffer);
end;
finally
Stream.Free;
end;
end;
end.


 
Ihor Osov'yak ©   (2003-02-08 16:45) [1]

А проблема то где?

если в TFileStream.Create("Project1.exe" - так наверно файл заблокирован соотв. процессом. Или это ты сам себя?

Обрати внимание на CreateFile, в особенности на
DWORD dwDesiredAccess, // access (read-write) mode
DWORD dwShareMode, // share mode


 
орлов   (2003-02-08 16:51) [2]

не в етом дело

procedure TForm1.Button2Click(Sender: TObject);
var
Buffer: PChar;
Stream: TFileStream;
Size: LongInt;
i:integer;
begin
Stream := TFileStream.Create(Edit1.Text, fmOpenRead);
try
Size := Stream.Size;
GetMem(Buffer, Size);
try
Stream.Read(Buffer[0], Size);
for i:=1 to length(Buffer) do
Memo2.Text:=Memo2.Text+format("%x",[ord(Buffer[i])]);
finally
FreeMem(Buffer);
end;
finally
Stream.Free;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if opendialog1.execute then
Edit1.Text:=OpenDialog1.FileName;
end;

end.
усё равно не открывает


 
Ihor Osov'yak ©   (2003-02-08 17:18) [3]

Ну млин, до чего упрямые молодые люди пошли...

var h:THandle;

...

h:=CreateFile(PChar(ParamStr(0)), GENERIC_READ,
FILE_SHARE_READ , nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);

// тут делай то что тебе надо, но только доступ по чтению
CloseHandle(h);

Зы - а по исходникам посмотри, что твой
TFileStream.Create делает, он в конечном итоге к CreateFile,
но я думаю, что как-раз то dwShareMode некорекное ставит...

Надеюсь после некоторого изучения исходников и мануалов заметишь,
что наверно нужно юзать (интуиция подсказывает)
TFileStream.Create(ParamStr(0), fmOpenRead+fmShareDenyNone);
TFileStream.Create(Edit1.Text, fmOpenRead+fmShareDenyNone);
...
проверь сам, но должно сработать... А если не сработает - то еще раз отслеживай где и с какими параметрами зовется CreateFile...
На момент вызова должно быть FILE_SHARE_READ




 
Ketmar ©   (2003-02-08 17:24) [4]

procedure HDumpF(const FileName: string; M: TMemo);
var
FI: TFileStream;
Buf: packed array[0..15] of Byte;
F, Rd: Integer;
S: string;
begin
FI := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
while (FI.Position < FI.Size) do
begin
Rd := FI.Size - FI.Position;
if (Rd > 16) then Rd := 16;
S := IntToHex(FI.Position, 8) + ": ";
FI.ReadBuffer(Buf, Rd);
F := 0;
while (F < 16) do
begin
if (F < Rd) then
S := S + IntToHex(Buf[F], 2) + " "
else
S := S + " ";
if (F = 7) then S := S + "| ";
Inc(F);
end;
S := S + " ";
F := 0;
while (F < Rd) do
begin
if (Buf[F] < 33) or (Buf[F] = 255) then
S := S + "."
else
S := S + Char(Buf[F]);
Inc(F);
end;
M.Lines.Append(S);
end;
finally
FI.Free;
end;
end;

...
HDumpF("a.exe", Memo1);
...


с тебя рубль. золотой. полновесный.

только учти, что в мемо есть ограничение на размер текста -- 64 кб. так что лучше поставь ричэдит. шрифт - Courier New.

Satanas Nobiscum! 08-Feb-XXXVIII A.S.


 
Chlavik ©   (2003-02-08 17:40) [5]

procedure TForm1.Button1Click(Sender: TObject);
var f:file of byte;
data:array of byte;
i:dword;
begin

AssignFIle(f,"d:\Key_Gen.exe");
Reset(f);
for i:=0 to FileSize(f)-1 do
begin
SetLength(data,i+1);
Read(f,data[i]);
end;
//Reset(f,1)
//GetMem(data,FileSize(f));
//BlockRead(f,data,FileSize(f)-1);
//for i:=0 to 10 do Memo1.Text:=Memo1.Text+" "+IntToHex(data[i],2);
CloseFile(f);
end;

Вся дата в data делай с ней что хочеш...


 
Ihor Osov'yak ©   (2003-02-08 17:51) [6]

2 Chlavik © (08.02.03 17:40)

Вы не правы. По умолчанию для "паскалевских" функций типа Reset и тп по умолчанию не включен режим разрешения совместного использоввания файлов для операций открытия...
См. Ketmar © (08.02.03 17:24), Ihor Osov"yak © (08.02.03 17:18)

или обрати внимание на глобальную переменную FileMode.
Также полезно посмотреть исходник _ResetFile модуля system



 
Chlavik ©   (2003-02-08 18:08) [7]

procedure TForm1.Button1Click(Sender: TObject);
var f:file of byte;
data:array of byte;
i:dword;
begin

AssignFIle(f,"d:\Key_Gen.exe");
Reset(f);
for i:=0 to FileSize(f)-1 do
begin
SetLength(data,i+1);
Read(f,data[i]);
end;
//Reset(f,1)
//GetMem(data,FileSize(f));
//BlockRead(f,data,FileSize(f)-1);
//for i:=0 to 10 do Memo1.Text:=Memo1.Text+" "+IntToHex(data[i],2);
CloseFile(f);
end;

Вся дата в data делай с ней что хочеш...


 
Chlavik ©   (2003-02-08 18:11) [8]

После вежливой и позновательной для меня дискусии С Ketmar я пришол к выводу что всё выше написаное мное више - бредь так что прошу не юзать...



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

Текущий архив: 2003.02.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
1-52942
pavel_k
2003-02-08 16:52
2003.02.17
Два класса


3-52704
me2
2003-01-29 12:33
2003.02.17
Добавление столбцов к гриду в On-Line


1-52824
Hoper
2003-01-27 14:36
2003.02.17
Как узнать, имеет ли класс или компонент какое-либо св-во


1-53021
htte
2003-02-10 19:18
2003.02.17
Как? Stringgrid


1-53019
smok_er
2003-02-10 18:58
2003.02.17
ListView and inplace editors