【问题标题】:Programmatically copying a CD, byte for byte以编程方式逐字节复制 CD
【发布时间】:2012-01-22 15:43:29
【问题描述】:

我想知道是否有人知道我可以通过编程为 CD 上的数据制作一个字节的字节副本?是否有一些可用的系统调用可以做这些事情?

我有一张 CD 以某种方式损坏或以其他方式损坏,导致某些文件无法通过资源管理器等访问。我知道那里有信息,我希望能够复制它(甚至处于损坏状态),但我当然不能通过文件系统做到这一点。

【问题讨论】:

  • 当然,您可以将位从该媒体复制到另一个媒体。但我不确定这将如何帮助事情。您仍然无法读取数据的副本。文件系统仍将损坏。
  • 我认为 A.R.要将数据读入内存。
  • @CodyGray 哎呀,这几乎就像我在问题中提到的那样。我是否应该注明我需要原始数据以便尝试修复?
  • 在 Linux 上只需要dd if=/dev/sr0 of=outputfile.bin。在 Windows 上,您可能必须像 here 所述那样处理特殊文件 \\.\PhysicalDriveN
  • @A.R. - 正如 Cody 所避免的,如果 CD 损坏到磁盘文件系统无法读取的程度(换句话说,它不再包含知道文件所在位置所需的信息),那么任何挽救数据的尝试无论如何都可能会导致垃圾。

标签: c# c++ windows-7


【解决方案1】:

一个 CD 帧是 2352 字节。对于数据 CD,这是 2048 字节的数据 + 杂项头和 ECC,但您可以读取大部分原始帧数据。驱动器可能会删除几个字节。因此,绕过 ISO 9660 文件系统并以原始模式读取 CD 是您最好的选择。在不可恢复的帧上读取将失败并出现错误,但您可能能够越过它们并开始读取下一帧。

在 linux 上,您将打开低级 SCSI 设备,发出 ioctl 来设置 CDROMREADRAW 并根据需要使用 read 和 lseek。

CD 编程内容的描述是here

This page 有在 Windows 上读取 CDROM 的信息,但没有说明它是否返回原始数据。

【讨论】:

  • 是的,这真的很好,但问题是关于“Windows”
  • Windows 有一个 CDROM 读取 API,所以我添加了一个指向它的链接,但我不知道它是否会为您获取原始数据。使用最适合工作的工具。
猜你喜欢
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
  • 2021-04-12
  • 1970-01-01
相关资源
最近更新 更多