CDをファイルとして読むには?

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

私はすでに有効なファイルハンドルを持っている場合、私はTFileStreamを使用できることを願っています。

11
私は英語の文法を修正しました。それがより良いことを望みますか?
追加された 著者 Warren P,
-1あなたの質問は私にはあいまいです。あなたの質問を更新して、CD上のデータをどのように扱うかを言います。
追加された 著者 Samuel Harmer,
それが私の要点です。 「CDをファイルとして読み込む」と言うのは曖昧です。問題を明確にしてあいまいさがありません
追加された 著者 Samuel Harmer,
ファイルのコンセプトには、ファイルシステムを参照してください。元の質問では、「ファイル」があなたの意味を説明していません。ほとんどの人がオペレーティングシステムの定義に従ってCDから「ファイル」にアクセスする理由は、CDのファイルシステム(通常 ISO 9660
追加された 著者 Samuel Harmer,
@ Styne666:どうやってデータにアクセスするのですか?私の強い確信は、論理的なファイルを使ってそれにアクセスすること(つまり、物理的なメディア全体として、私が意味することです)が行く方法です。 'データ'という用語を使用しても混乱しますが、これは人々にファイルシステムを考えるようになるかもしれません。
追加された 著者 menjaraz,
@ Styne666:私を信じて!あなたの意見は私にとって貴重なものであり、投稿にはあまりにも多くの編集を感謝しています。
追加された 著者 menjaraz,
@ワーレンP:編集はここで奨励されています。ありがとうございました。
追加された 著者 menjaraz,

1 答え

私の見解では 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ディスクセクタが非常にうまく別のサイズになることを期待しています。

12
追加された
Sir David、そのファイルストリームの進捗バーのどこにコールバックを置くのですか? ?
追加された 著者 Bianca,
@Davidと答えられない情報に依存している場合、人々は不完全な質問を投票します。
追加された 著者 Samuel Harmer,
ここで説明する物理ボリュームの名前付け: msdn.microsoft.com/ en-us/library/windows/desktop /… あなたの投稿を理解するのに問題はありませんでした。時々あなたは何らかの知識が不足している可能性があるため、あなたが意味することを理解していない人々からダウンポートを取り上げることがあります。あなたはあまりそれについて行うことはできません。心配しないでください。私はあなたに今upvoteを与えるよ!
追加された 著者 David Heffernan,
@ Styne666ああ、それも起こることができます!
追加された 著者 David Heffernan,
パターンは '\\。\ DRIVELETTER:'です、そうですか?私には特別な賛成をお願いします:私はネイティブスピーカーではありません。混乱していると私の投稿を改善するヒントを与えることができますか?(投稿されたらすぐにダウンワードのラインファイヤーの下にあった)
追加された 著者 menjaraz,
@ Styne666:私の投稿を編集するのを助けます。ここでは、コミュニケーションスキルが求められており、評判(Upvote/Downvote)で支払う必要があります。ある日、私はデービッド自身がそれに答えると私のポストを編集しました。非ネイティブの英語学習は、私のための進行中のプロセスであり、まだ改善の余地があることを願っています。
追加された 著者 menjaraz,
これはデータCDに対してのみ確実に機能することに注意してください。オーディオCDからデジタルオーディオデータを読み取ることはまったく別の獣です。
追加された 著者 afrazier,