Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.02.17;
Скачать: [xml.tar.bz2];

Вниз

почему не получается 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
1-52829
Nemas
2003-02-07 10:18
2003.02.17
Как определить количество строк в TMemo?


1-53028
Behemoth
2003-02-10 14:00
2003.02.17
Как сделать, чтобы вид курсора был неизменен?


14-53197
Jaxtor
2003-01-31 10:43
2003.02.17
Firebird


1-53030
ec
2003-02-10 20:44
2003.02.17
TDBNavigator


4-53321
Delphi5.01
2003-01-07 02:02
2003.02.17
Get IP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский