delphi - 如何将 CD 读取为文件?

标签 delphi cd

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

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

最佳答案

在我看来,使用 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;

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

关于delphi - 如何将 CD 读取为文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9159438/

相关文章:

delphi - TDirect2DCanvas 中的字体方向不起作用?

http - 如何在 Delphi 中使用 HTTP 客户端 API

database - 如何使用 Delphi FireDAC 对数据库应用具有 UNIQUE 约束的缓存更新 FDQuery

shell - cd 到符号链接(symbolic link)目录在 cron 环境中失败

c++ - 无法在 C++ 中使用 system() 更改目录

git - VSTS 构建失败,Git 提取失败,退出代码为 : 128

xml - 有人有描述 Delphi TClientDataSet XML 文件的元数据部分的部分 XSD 吗?

xml - Delphi:将对象流式传输到 XML,包括数组属性

macos - 为什么我不能进入这个目录?

php - 如何在 CD 上运行 xampp?