2012-02-06 43 views
11

Tôi muốn biết liệu Delphi có thể đọc CD dưới dạng luồng thô trực tiếp từ thiết bị ổ đĩa logic "C: \" hay không.Làm thế nào để đọc đĩa CD dưới dạng tệp?

Tôi hy vọng tôi có thể sử dụng TFileStream nếu tôi đã xử lý tệp hợp lệ.

+4

-1 Câu hỏi của bạn có vẻ mơ hồ đối với tôi. Cập nhật câu hỏi của bạn để nói cách bạn muốn xử lý dữ liệu trên đĩa CD. –

+0

@ Styne666: Làm thế nào tôi có thể xử lý dữ liệu trước khi truy cập dữ liệu theo cách này hay cách khác? Niềm tin mạnh mẽ của tôi là tiếp cận nó (toàn bộ phương tiện vật lý, ý tôi là) thông qua một tập tin logic là cách để đi. Ngay cả khi sử dụng thuật ngữ 'dữ liệu' là khó hiểu, điều này có thể khiến mọi người nghĩ về hệ thống tệp. – menjaraz

+0

Đó là quan điểm của tôi. Nói "đọc đĩa CD dưới dạng tệp" là mơ hồ. Làm rõ câu hỏi để có ** không mơ hồ **. –

Trả lời

11

Cách đơn giản nhất là sử dụng THandleStream thay vì TFileStream trong chế độ xem của tôi. Như thế này:

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; 

Hãy cẩn thận khi sử dụng truy cập đĩa thô bạn phải đọc chính xác bội số của các ngành. Các sector trên đĩa tôi đã thử nghiệm có kích thước 512 byte. Tôi hy vọng rằng các lĩnh vực đĩa CD có thể rất tốt là một kích thước khác nhau.

+0

Vì vậy, mẫu là '\\. \ DRIVELETTER:', tôi có đúng không? Xin vui lòng cho tôi một ưu tiên thêm: Tôi không phải là một người bản ngữ, bạn có thể đưa ra một gợi ý để cải thiện bài viết của tôi nếu nó gây nhầm lẫn (Đó là theo dòng của downvoters ngay sau khi đăng)? – menjaraz

+0

Đặt tên khối lượng vật lý được mô tả tại đây: http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858.aspx#physical_disks_and_volumes Tôi không gặp vấn đề gì khi hiểu bài đăng của bạn (tôi nghĩ). Đôi khi bạn sẽ nhận được downvotes từ những người không hiểu những gì bạn có nghĩa là bởi vì họ có lẽ thiếu một số kiến ​​thức. Không có nhiều bạn có thể làm về điều đó. Đừng lo lắng. Tôi sẽ cung cấp cho bạn một upvote ngay bây giờ! –

+2

@David và đôi khi mọi người bỏ phiếu cho các câu hỏi chưa hoàn chỉnh khi câu trả lời phụ thuộc vào thông tin không được cung cấp. –

Các vấn đề liên quan