11

Delphiで、論理ディスクドライブデバイス「C:\」から直接CDを生のストリームとして読み取ることができるかどうかを知りたいです。

すでに有効なファイルハンドルがあれば、TFileStreamを使用できるといいのですが。

4

1 に答える 1

12

私の見解THandleStreamよりも使用するのが最も簡単です。TFileStreamこのような:

procedure ReadFirstSector;
var
  Handle: THandle;
  Stream: THandleStream;
  Buffer: array [1..512] of Byte;
  b: Byte;
begin
  Handle := CreateFile('\\.\C:', GENERIC_READ,
    FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  if Handle=INVALID_HANDLE_VALUE then
    RaiseLastOSError;
  try
    Stream := THandleStream.Create(Handle);
    try
      Stream.ReadBuffer(Buffer, SizeOf(Buffer));
      for b in Buffer do
        Writeln(AnsiChar(b));
    finally
      Stream.Free;
    end;
  finally
    CloseHandle(Handle);
  end;
end;

rawディスクアクセスを使用する場合は、正確に複数のセクターを読み取る必要があることに注意してください。テストしたディスクのセクターのサイズは512バイトです。CDディスクセクターは非常に異なるサイズになる可能性があると思います。

于 2012-02-06T11:53:02.313 に答える