如何将CD作为文件读取?

men*_*raz 11 delphi cd

我想知道在Delphi中是否可以直接从逻辑磁盘驱动器设备"C:\"读取CD作为原始流.

如果我已经有一个有效的文件句柄,我希望我可以使用TFileStream.

Dav*_*nan 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;
Run Code Online (Sandbox Code Playgroud)

请注意,使用原始磁盘访问时,您必须准确读取多个扇区.我测试的磁盘上的扇区大小为512字节.我预计CD磁盘扇区可能会有不同的大小.

  • @ Styne666:你帮我编辑了很多帖子.在这里,一个良好的沟通技巧也受到追捧,并应支付声誉(Upvote/Downvote).有一天,大卫自己在回答之后编辑了我的帖子,因为它充满了大错.作为非本地人,学习英语对我来说是一个持续的过程,并希望仍有改进的空间. (5认同)
  • @David,当答案取决于未提供的信息时,有时人们会对不完整的问题投票. (2认同)
  • 请注意,这只能可靠地用于数据CD.从音频CD读取数字音频数据是完全不同的野兽. (2认同)