2012-02-06 25 views
11

Delphi'de bir CD'yi "C: \" mantıksal disk sürücü aygıtından doğrudan bir ham akış olarak okumak mümkün olup olmadığını bilmek istiyorum.CD dosya olarak nasıl okunur?

Umarım zaten geçerli bir dosya tanıtıcım varsa bir TFileStream kullanabilirim.

+4

-1 Sorunuz bana belirsiz geliyor. Verileri CD'deki verileri nasıl ele almak istediğinizi söylemek için güncelleyin. –

+0

@ Styne666: Verileri, bir şekilde erişmeden önce nasıl ele alabilirim? Benim güçlü inancım, mantıksal bir dosya aracılığıyla (yani, bir bütün olarak fiziksel medya) erişmenin yoludur. 'Veri' terimini kullanmak bile kafa karıştırıcıdır, bu da insanları dosya sistemini düşünmeye yönlendirebilir. – menjaraz

+0

Bu benim amacım. "CD'yi bir dosya olarak oku" deyip belirsiz. Soruyu açıklığa kavuşturun, yani ** belirsizlik yok **. –

cevap

11

Görünümümde TFileStream yerine THandleStream kullanmak en kolay yoldur. Bunun gibi:

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; 

Ham disk erişimi kullanırken, sektörlerin tam katlarını okumanız gerektiğine dikkat edin. Test ettiğim diskteki sektörler 512 bayt boyuttadır. CD disk sektörlerinin çok farklı bir boyutta olmasını bekliyorum.

+0

Yani desen '\\. \ DRIVELETTER:', doğru muyum? Lütfen bana fazladan bir iyilik yap: Ben bir yerli konuşmacı değilim, eğer kafamı karıştırıyorsa, yazımı geliştirmek için bir ipucu verebilir misiniz? (Gönderiyi yapan en kısa zamanda yankılandı). – menjaraz

+0

Burada açıklanan fiziksel birim adlandırma: http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858.aspx#physical_disks_and_volumes Gönderinizi anlamakta sorun yaşamadım (bence). Bazen ne demek istediğini anlamayan insanlardan aldığınız indirimleri alırsınız, çünkü bunlar belki de bazı bilgiden yoksundurlar. Bununla ilgili fazla bir şey yapamazsın. Endişelenme. Şimdi size bir son vereceğim! –

+2

@David ve bazen, cevap verilmeyen bilgilere bağlı olduğunda insanlar eksik sorular için oy verdiler. –

İlgili konular