2012-02-06 13 views
11

Quiero saber si es posible en Delphi leer un CD como flujo directo sin formato desde el dispositivo de disco lógico "C: \".¿Cómo leer un CD como un archivo?

Espero que pueda utilizar un TFileStream si ya tengo un identificador de archivo válido.

+4

-1 Su pregunta me parece vaga. Actualice su pregunta para decir cómo desea tratar los datos en el CD. –

+0

@ Styne666: ¿Cómo podría tratar los datos antes de acceder a ellos de una forma u otra? Mi fuerte convicción es que acceder a ella (los medios físicos como un todo, quiero decir) a través de un archivo lógico es el camino a seguir. Incluso usar el término 'datos' es confuso, esto puede llevar a las personas a pensar en el sistema de archivos. – menjaraz

+0

Ese es mi punto. Decir "leer un CD como un archivo" es vago. Aclare la pregunta para que no haya ** ninguna ambigüedad **. –

Respuesta

11

Es más fácil usar THandleStream en lugar de TFileStream en mi opinión. De esta manera:

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; 

Tenga en cuenta que al usar el acceso al disco sin procesar debe leer exactamente los múltiplos de sectores. Los sectores en el disco que probé tienen un tamaño de 512 bytes. Espero que los sectores de discos CD puedan tener un tamaño diferente.

+0

Entonces el patrón es '\\. \ DRIVELETTER:', ¿estoy en lo cierto? Por favor, hazme un favor adicional: no soy un hablante nativo, ¿puedes dar una pista para mejorar mi publicación si es confusa? (¿Estaba bajo el fuego de línea de los detractores tan pronto como se publicó)? – menjaraz

+0

Nombramiento del volumen físico descrito aquí: http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858.aspx#physical_disks_and_volumes No tuve problemas para entender tu publicación (creo). A veces obtendrás votos bajos de personas que no entienden lo que quieres decir porque quizás carecen de algún conocimiento. No puedes hacer mucho sobre eso. No te preocupes ¡Te daré un voto positivo ahora! –

+2

@David y, en ocasiones, las personas otorgan los votos por preguntas incompletas cuando la respuesta depende de información no proporcionada. –