我想知道Delphi是否有可能直接从逻辑磁盘驱动器设备“C:\”读取CD作为原始流。
如果我已经有一个有效的文件句柄,我希望我可以使用TFileStream。
我想知道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磁盘扇区可能会有不同的大小。