
31.01.2012, 22:27
|
 |
.
|
|
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
|
|
Я знаю значение и область применения флагов. Непонятно зачем кому-то отдавать ещё на чтение.
Попробую на iso-шке.
Долго подбирал позицию, где не пустые байты.
Код:
program test;
{$APPTYPE CONSOLE}
uses
Windows, Messages;
var
h : HFILE;
buf : array[0..4095] of Byte;
Read, p : DWORD;
m, nac : DWORD;
begin
m := 1;
nac := 4800000000 - $FFFFFFFF - 1;
h := CreateFileA('cinema4D_11.008.iso', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, NIL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if h <> INVALID_HANDLE_VALUE then
begin
p := SetFilePointer(h, nac, @m, FILE_BEGIN);
if p <> 0 then
ReadFile(h, Buf, SizeOf(Buf), Read, NIL);
end;
end.
нормально счталось, писать по понятной причине в файл не стал.
Решил протестировать до конца на копии:
Код:
program test;
{$APPTYPE CONSOLE}
uses
Windows, Messages;
var
h : HFILE;
buf : array[0..4095] of AnsiChar;
Read, p : DWORD;
m, nac : DWORD;
begin
m := 1;
nac := 4800000000 - $FFFFFFFF - 1;
h := CreateFileA('cinema4D.iso', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, NIL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if h <> INVALID_HANDLE_VALUE then
begin
p := SetFilePointer(h, nac, @m, FILE_BEGIN);
if p <> 0 then
begin
ReadFile(h, Buf, SizeOf(Buf), Read, NIL);
lstrcpy(Buf, 'Вася Питерский');
p := SetFilePointer(h, nac, @m, FILE_BEGIN);
if p <> 0 then
WriteFile(h, Buf, SizeOf(Buf), Read, NIL);
end;
end;
end.
читается и пишется нормально.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
|