2012-02-06 3 views
11

デルファイでは、論理ディスクドライブデバイス "C:\"からRawストリームとして直接CDを読み込むことができるかどうかを知りたいと思います。CDをファイルとして読むには?

有効なファイルハンドルが既にある場合は、TFileStreamを使用できたらいいですか?

+4

-1あなたの質問は私にはあいまいです。あなたの質問を更新して、CD上のデータをどのように扱うかを言います。 –

+0

@ Styne666:データにアクセスする前に、どうやってデータを扱うことができますか?私の強い確信は、論理的なファイルを使ってそれにアクセスすること(つまり、物理的なメディア全体として、私が意味することです)が行く方法です。 'データ'という用語を使用しても混乱しますが、これは人々にファイルシステムを考えるようになるかもしれません。 – menjaraz

+0

それが私の要点です。 「CDをファイルとして読み込む」と言うのは曖昧です。質問が明確になるように**あいまいさはありません**。 –

答えて

11

私の見解ではTFileStreamではなくTHandleStreamを使用するのが最も簡単です。このように:

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; 

rawディスクアクセスを使用しているときは、セクタの正確倍数を読まなければならないことに注意してください。私がテストしたディスクのセクタは512バイトです。私は、CDディスクセクタが非常にうまく別のサイズになることを期待しています。

+0

パターンは '\\。\ DRIVELETTER:'です、そうですか?私には特別な賛成をお願いします:私はネイティブスピーカーではありません。混乱していると私の投稿を改善するヒントを与えることができますか?(投稿されたらすぐにダウンワードのラインファイヤーの下にあった) – menjaraz

+0

物理ボリュームの名前はここに記述されています:http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858.aspx#physical_disks_and_volumes私はあなたの投稿を理解するのに問題はありませんでした。時々あなたは何らかの知識が不足している可能性があるため、あなたが意味することを理解していない人々からダウンポートを取り上げることがあります。あなたはあまりそれについて行うことはできません。心配しないでください。私はあなたに今upvoteを与えるよ! –

+2

@Davidそして答えが提供されていない情報に依存している場合、人々は不完全な質問を投票します。 –

関連する問題