Текущий архив: 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.46 MB
Время: 0.011 c