Показать сообщение отдельно
  #15  
Старый 31.01.2012, 22:27
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 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 в.д.
Ответить с цитированием