cd-r0m光盘在cd-r0m光盘驱动器下载安装上???

当前位置:
如何用编程获取CD-ROM的驱动器盘符?
如何用编程获取CD-ROM的驱动器盘符?
发布日期: 17:16
浏览次数:4560次
标  签:C++,MFC
文章评分:5.0
操  作:
称号:未设置简介:...
文章概要:
一台机器可能有不止一个CD-ROM驱动器。现在CD-ROM已经是PC机的标准配置,此外再装个可擦写的光盘驱动,甚至是DVD都是很常见的事情。不管一台机器上装多少个不同的驱动器,如何找到它们呢?
[提出问题]&
最近我正在开发一个程序,任务是从CD-ROM上读取文件,如视频和音频文件。因为每一台机器上的情况都不一样。如何知道CD-ROM驱动器呢?
首先,一台机器可能有不止一个CD-ROM驱动器。现在CD-ROM已经是PC机的标准配置,此外再装个可擦写的光盘驱动,甚至是DVD都是很常见的事情。不管一台机器上装多少个不同的驱动器,如何找到它们呢?
有关驱动器的函数有GetLogicalDrives,GetLogicalDriveStrings和GetDriveType。前两个用来获取逻辑驱动器盘符,GetLogicalDriveStrings返回路径名字符串,如:
&"A:\C:\F:\"
这里每一个路径名都由NULL(空或者零)字符分隔,最后结尾是两个空字符--这是标准的C风格处理方法。对于喜欢操作位和字节的汇编语言使用者来说,GetLogicalDrives是个很好用的API函数。它以位掩码的形式返回逻辑驱动器。即在一个DWORD类型的返回值中,位0(最小的一位)表示驱动器A,位1表示驱动器B,以此类推。每一个位的状态如果是on,则表示对应的逻辑驱动器存在;否则状态为off,表示对应的逻辑驱动器不存在。大家知道DWORD是一个32位的值,足以包括所有的英文字母,也就是说最多可有26个盘符。
为了确定某个逻辑驱动器的类型,必须调用GetDriveType函数。它以路径名作为参数(如C:\),返回DRIVE_FIXED,DRIVE_REMOVABLE,或DRIVE_UNKNOWN。下面列出了所有可能返回的值:这些值在winbase.h定义
#define DRIVE_UNKNOWN
// 无效路径名
#define DRIVE_NO_ROOT_DIR
// 无效路经,如无法找到的卷标
#define DRIVE_REMOVABLE
// 可移动驱动器(如磁盘驱动器,光驱等)
#define DRIVE_FIXED
// 固定的驱动器 (如 通常的硬盘)
#define DRIVE_REMOTE
// 网络驱动器
#define DRIVE_CDROM
#define DRIVE_RAMDISK
// 随机存取(RAM) 磁盘
为了更容易说明问题,我写了一个小程序--ListDrives,它可以列出某台机器上所有的逻辑驱动器。其实现代码如下:
ListDrives.cpp
#include "stdafx.h"
#include "resource.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
// for string class
// 下面是一个GetDriveType返回码与人可读字符串的迷你对照表
// GetDriveType返回码类型
// ascii 名称
} DriveTypeFlags [] = {
{ DRIVE_UNKNOWN,
{ DRIVE_NO_ROOT_DIR, "无效路经" },
{ DRIVE_REMOVABLE,
"可移动" },
{ DRIVE_FIXED,
{ DRIVE_REMOTE,
"网络驱动器" },
{ DRIVE_CDROM,
"CD-ROM" },
{ DRIVE_RAMDISK,
"随机存取磁盘" },
{ 0, NULL},
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) {
cerr && _T("Fatal Error: MFC initialization failed") &&
return -1;
// 获取逻辑驱动器字符串- a:\b:\c:\... 等.
// 还可以用GetLogicalDrives 以位图形式代替字符串形式获取信息
TCHAR buf[100];
DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);
// 显示每个驱动器的信息
string msg = "Logical Drives:\n";
// STL string
for (TCHAR* s= *s; s+=_tcslen(s)+1) {
LPCTSTR sDrivePath =
msg += sDriveP
msg += " ";
// GetDriveType 获取枚举值,如DRIVE_UNKNOWN等.
UINT uDriveType = GetDriveType(sDrivePath);
// 查找驱动器类型。在此我用了表(结构数组)来进行查找处理,过于繁琐了一些,
// 但既然uDriveType 的值是连续的。
// 我可以用DriveTypeFlags[uDriveType]来代替线性查找。在实际的编程中通常可以这么做:
// if (uDriveType & DEVICE_CDROM) {
for (int i=0; DriveTypeFlags[i]. i++) {
if (uDriveType == DriveTypeFlags[i].type) {
msg += DriveTypeFlags[i].
msg += ''''''''''''''''\n'''''''''''''''';
cout && msg.c_str();
&程序代码很简单,它是一个MFC程序。用GetLogicalDriveStrings获取所有逻辑驱动器的根路径名,然后调用GetDriveType来确定每个驱动器的类型。如果你要找CD-ROM,则检查uDriveType = DRIVE_CDROM就可以了。
最多还可以输入100字
【VIP年会员制套餐】
【C/C++软件工程师实战能力集训大纲】
VC知识库发布了C/C++业界的“本草纲目”
【牛人都在千人一号群! 加群三步走!!!】
第一步:请必须加VC知识库QQ: 为好友;
第二步:请必须关注本站微博:
第三步:申请加入群:.(必须将关注微博截屏发到QQ方可通过!)
【最新2013:】
全部100% VC++源码提供: E-Form++全新大型SCADA & HMI解决方案源码、CAD解决方案源码、Gis解决方案源码 、电力石油化工仿真与图形建模解决方案源码、大量其他高级制图VC++源码下载!
【 新视频发布】
o o o o o o o o o o
在VC环境中除了我们所常用的Dialog、Menu和Bitmap等标准资源类型之外,它还支持自定义资源类型(Custom Resource),我们自定义的资源类型能做些什么呢?呵呵,用处多多。...
在VC环境中除了我们所常用的Dialog、Menu和Bitmap等标准资源类型之外,它还支持自定义资源类型(Custom Resource),我们自定义的资源类型能做些什么呢?呵呵,用处多多。...
本文介绍了套接字编程的基本知识。...请问我的电脑上DVD/CD-ROM 驱动器,(标准 CD-ROM 驱动器)是DVD光驱吗?_百度知道
请问我的电脑上DVD/CD-ROM 驱动器,(标准 CD-ROM 驱动器)是DVD光驱吗?
提问者采纳
一般在品牌和名称等信息后面会带有DVD或者CD的字样;如果显示为“CD-RW”就是CD刻录机,但标题只显示设备类别为DVD或者CD驱动器。一般只会有这几种。若要很简单就能看出来是DVD还是CD光驱;如果显示为“DVD-RW”就是DVD刻录机,硬盘所有分区下边的那个盘符就是光驱了,展开后下面的子项目才显示得详细、型号;如果显示为“DVD-ROM”便是是DVD光驱,可以此分辨,如果显示为“CD-ROM”便是CD光驱,打开我的电脑就知道了,可以看到光驱的品牌,需要在这里才看得出来、类别等。不知这样解释你学会看了吗光凭你给出的这点信息还不能断定。你看到的这个信息是在“设备管理器”中光驱显示的名称
提问者评价
其他类似问题
按默认排序
其他2条回答
使用时通过光碟驱动器读出信息,信息将永久保存在光碟上CD-ROM(Compact Disc Read-Only Memory)即只读光盘。这种光碟只能写入数据一次,是一种在电脑上使用的光碟
你拿碟试一试不就知道了。光驱面板上一般标有是CD或DVD的呀
dvd光驱的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Linux:如何挂载CD-ROM光盘驱动器
如何在linux操作系统的命令行下挂载光盘驱动器呢?你需要使用mount命令来挂载CD或者DVD光盘驱动器,首先,你需要先插入CD或者DVD到光盘驱动器里,然手输入下面的mount命令来挂载光盘。
使用下面的命令来获取DVD/CD-ROM/Writer设备的名字:
#dmesg | egrep -i --color 'cdrom|dvd|cd/rw|writer
命令输出:
ata2.00: ATAPI: VMware Virtual IDE CDROM Drive, , max UDMA/33
sr0: scsi3-mmc drive: 1x/1x writer dvd-ram cd/rw xa/form2 cdda tray
在linux系统里挂载DVD/CDROM的参数
#mount -t iso9660 -o ro /dev/设备名 /挂载目录名
创建挂载点,输入mkdir命令:
#mkdir -p /mnt/cdrom
挂载/dev/cdrom 或者/dev/sr0:
#mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom
#mount -t iso9660 -o ro /dev/sr0 /mnt/cdrom
使用下面的两个命令来验证光驱是否挂载在/mnt/cdrom上,输入下面的命令:
如何卸载已经挂载的光驱?
输入下面的命令:
#umount /cdrom
#umount /dev/cdrom
#umount /mnt/cdrom
版权信息:>>本文链接: .如果喜欢:
最新IT评论
友情链接:您还未登陆,请登录后操作!
我的CD-ROM的驱动程序不见了怎么办
&没有CD-ROM的盘符。我的CD-ROM的驱动程序不见了怎么办(在设备管理器这显示Windows 无法加载这个硬件的设备驱动)
一. 软件方面的原因
  1、IDE驱动程序安装错误或与某个驱动程序有冲突
  如果我们在安装WINDOWS没有将IDE驱动程序正确安装,或者在安装后当你打开设备管理器查看“硬盘控制器“时发现其中有黄色叹号时,这时光驱的盘符就可能找不到了。
  在正常情况下,当我们进入安全模式时,光驱的盘符是不会有的。如果我们想在安全模式下使用光驱,我们可以在Autoexec.BAT和 s文件中加载光驱的驱动,这样我们在重新启动电脑后,就可以在安全模式下使用光驱了。
  2、CONFIG文件中设置LASTDRIVE数量设置太少
  如果我们在CONFIG。SYS文件中设置了“LASTDRIVE=?”的数量太少,小于实际的驱动器数量,这时即使我们安装了光驱,但在“我的电脑“中了看不到光驱的影子。这时只要去掉该项设置或设置为“LASTDRIVE=Z”即可。
  3、DMA设置不当
  如果光驱只支持PIO4标准,不支持DMA/33标准,而我们却强行让光驱使用该标准(在“我的电脑”属性中“设备管理器”中光驱“CDROM”属性中“设置”选项的“DMA”前打“√”)。这时有时会造成光驱丢失,有时会造成电脑不能正
一. 软件方面的原因
  1、IDE驱动程序安装错误或与某个驱动程序有冲突
  如果我们在安装WINDOWS没有将IDE驱动程序正确安装,或者在安装后当你打开设备管理器查看“硬盘控制器“时发现其中有黄色叹号时,这时光驱的盘符就可能找不到了。
  在正常情况下,当我们进入安全模式时,光驱的盘符是不会有的。如果我们想在安全模式下使用光驱,我们可以在Autoexec.BAT和 s文件中加载光驱的驱动,这样我们在重新启动电脑后,就可以在安全模式下使用光驱了。
  2、CONFIG文件中设置LASTDRIVE数量设置太少
  如果我们在CONFIG。SYS文件中设置了“LASTDRIVE=?”的数量太少,小于实际的驱动器数量,这时即使我们安装了光驱,但在“我的电脑“中了看不到光驱的影子。这时只要去掉该项设置或设置为“LASTDRIVE=Z”即可。
  3、DMA设置不当
  如果光驱只支持PIO4标准,不支持DMA/33标准,而我们却强行让光驱使用该标准(在“我的电脑”属性中“设备管理器”中光驱“CDROM”属性中“设置”选项的“DMA”前打“√”)。这时有时会造成光驱丢失,有时会造成电脑不能正常启动。这时我们可以进入安全模式,将CDROM属性中的DMA设置去掉就可以了。我们所使用的硬盘或者光驱具体支持何种数据传输模式,我们在计算机启动过程中的第二屏的基本配置表中可以看到。
  4、光驱在注册表里被恶意屏蔽掉了
  在“我的电HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVrsion/Polices/xplorer中的“NoDrivers“的二进制值是否是光驱的值。正常情况下没有该项,也可将该项值改为“00 00 00 00“(01 00 00 00为A,04 00 00 00为C,FF FF FF FF为隐藏所有驱动器)。
  注意;现在有的病毒专门更改注册表,使光驱盘符丢失,。有的病毒不会使光驱盘符丢失,但是会禁止光驱读盘,什么样的光盘也不能读,但在却能够用光盘启动。
  5、光驱的驱动是否安装正确
 通常在WINDOWS中都自带了光驱的驱动,不需要另外添加。如果光驱的驱动程序安装的不是它自己的驱动程序,也会出现光驱丢失的情况。这种情况的出现一般是添加了所谓的“优化”、“加速程序”或者其他程序。这时可进入安全模式将“设备管理器“中的“CDROM“选项删除,然后重新启动计算机,让系统自己发现新硬件重新安装光驱的驱动即可。
  6、CMOS设置不当
  如果在CMOS设置中传输模式设置有误--不支持PIO MODE3或PIO MODE4或者DMA/33的老光驱便会在WINDOWS中出现没有光驱的图标,无光驱可用。这时只需要进入CMOS中将“INTEGRATED PERIPHERAIS“项,将“IDE PRIMARY MASTER PIO(或UDMA)“和“IDE PRIMARY SLAVE PIO(或UDMA)“改为“AUTO“即可。
  7.使用虚拟光驱不当
  虚拟光驱可以避免频繁读取光盘,提高读取速度,为我们方便的玩光盘游戏提供了可能。不过有时我们在不想使用虚拟光驱程序时,想卸载它或者想安装最新的程序时,却出现了意外,虚拟光驱的盘符有,实际光驱的盘符却丢失了。
  
二.硬件方面的原因
1、数据线接反或者数据线损坏
 在光驱丢失时,应首先检查一下光驱的数据线是否接反了,是否有松动。如果在确定其他地方没有问题时,并且光驱的数据线经常移动,这时应该更换一条数据线试一试。
  2、跳线设置与硬盘有冲突
  当光驱的跳线和在同一条数据线上连接的硬盘相同时就会出现找不到光驱(也可能没有硬盘),这时只要将光驱的跳线跳成和硬盘不一样即可。为了提高数据传输率,最好将硬盘和光驱分开在两个IDE接口上。
  3、电源线故障,缺少+5V电压或+5V电压供电不正常
  这种情况不多出现。由于我们在拆装光驱或者硬盘时用力过大,使电源的D型插头松动或者由于电脑工作环境的恶劣插头氧化生锈,光驱的电源供给不是很正常,光驱便也发现不了。
    4、IDE接口损坏
  如果是突然出现光驱的盘符丢失,无法使用光驱,这时我们可以把光驱和硬盘的接口互换一下。如果再次启动后发现能够找到光驱,但却找不到硬盘,这说明是原来接光驱的IDE接口损坏了;如果互换后电脑能够正常启动,但仍旧没有光驱,这说明是光驱自身的原因,造成的光驱盘符丢失,这时只能更换光驱。
  如果在WINDOWS下没有光驱,我们还可以在DOS(重新启动电脑后按F8进DOS,而非WIN98下的DOS)下用WINDOWS的万能光驱驱动IDE.SYS来试着加载光驱,如果能够加载成功,说明是软件方面的原因,应主要从软件方面查找原因。否则就应从硬件方面来考虑。
  
三.光驱常见故障分析
1.系统自检时能够检测到光驱,但在Windows操作系统下却没有发现光驱盘符。
故障分析:出现这种情况的可能性主要有几种:A.在安全模式下进入了操作系统、B.机器感染了病毒、C.Windows操作系统自带的光驱驱动程序失效。
解决方法:由于在安全模式下的操作系统不加载任何驱动程序,因此找不到光驱是正常现象。我们这里只说后两种,如果排除了病毒原因还找不到光驱盘符的话,可采用以下几种方法:
①、使用“超级兔子”中“系统工具”光驱修复工具进行修复。
②. 进入控制面板,选择“添加新硬件”,然后根据提示一步一步往下做,当系统检查完毕之后,一般能找到光驱;或者;进入控制面板,选择“设备管理器“,将其中的”硬盘控制器“项删除,然后重新启动计算机。由于光驱与硬盘采用同一个控制器,因此当将其删除并重新启动后就会自动进行识别,一般就能找回光驱的盘符;
③、如若以上办法不行,可以先在DOS模式下驱动光驱,例如加载万能光驱驱动程序IDE.SYS来解决。
-ROM好像不用装驱动的,你重新接一下光驱看看
您的举报已经提交成功,我们将尽快处理,谢谢!
大家还关注您现在的位置: &
如何用编程获取CD-ROM的驱动器盘符?
如何用编程获取CD-ROM的驱动器盘符?
  如何用编程获取CD-ROM的驱动器盘符?& & && & & &作者:赵湘宁  下载源代码& & &[提出问题] & & && & &&&& 最近我正在开发一个程序,任务是从CD-ROM上读取文件,如视频和音频文件。因为每一台机器上的情况都不一样。如何知道CD-ROM驱动器呢?& & & && & & & & & [解答] & & && & &&&& 首先,一台机器可能有不止一个CD-ROM驱动器。现在CD-ROM已经是PC机的标准配置,此外再装个可擦写的光盘驱动,甚至是DVD都是很常见的事情。不管一台机器上装多少个不同的驱动器,如何找到它们呢?& & & &&&& 有关驱动器的函数有GetLogicalDrives,GetLogicalDriveStrings和GetDriveType。前两个用来获取逻辑驱动器盘符,GetLogicalDriveStrings返回路径名字符串,如:& & & && & &&&&&& & & & & & & &&A:\&null&C:\&null&F:\&null&&null&&  这里每一个路径名都由NULL(空或者零)字符分隔,最后结尾是两个空字符--这是标准的C风格处理方法。对于喜欢操作位和字节的汇编语言使用者来说,GetLogicalDrives是个很好用的API函数。它以位掩码的形式返回逻辑驱动器。即在一个DWORD类型的返回值中,位0(最小的一位)表示驱动器A,位1表示驱动器B,以此类推。每一个位的状态如果是on,则表示对应的逻辑驱动器存在;否则状态为off,表示对应的逻辑驱动器不存在。大家知道DWORD是一个32位的值,足以包括所有的英文字母,也就是说最多可有26个盘符。& & & &&& 为了确定某个逻辑驱动器的类型,必须调用GetDriveType函数。它以路径名作为参数(如C:\),返回DRIVE_FIXED,DRIVE_REMOVABLE,或DRIVE_UNKNOWN。下面列出了所有可能返回的值:这些值在winbase.h定义  #define DRIVE_UNKNOWN & & &0 & // 无效路径名#define DRIVE_NO_ROOT_DIR &1 & // 无效路经,如无法找到的卷标#define DRIVE_REMOVABLE & &2 & // 可移动驱动器(如磁盘驱动器,光驱等)#define DRIVE_FIXED & & & &3 & // 固定的驱动器 (如 通常的硬盘)#define DRIVE_REMOTE & & & 4 & // 网络驱动器#define DRIVE_CDROM & & & &5 & // CD-ROM#define DRIVE_RAMDISK & & &6 & // 随机存取(RAM) 磁盘为了更容易说明问题,我写了一个小程序--ListDrives,它可以列出某台机器上所有的逻辑驱动器。其实现代码如下:  ListDrives.cpp #include &stdafx.h&#include &resource.h&#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endi // for string class// 下面是一个GetDriveType返回码与人可读字符串的迷你对照表//struct { & UINT & & & &// GetDriveType返回码类型 & LPCSTR & & &// ascii 名称} DriveTypeFlags [] = { & { DRIVE_UNKNOWN, & & &未知& }, & { DRIVE_NO_ROOT_DIR, &无效路经& }, & { DRIVE_REMOVABLE, & &可移动& }, & { DRIVE_FIXED, & & & &固定& }, & { DRIVE_REMOTE, & & &&网络驱动器& }, & { DRIVE_CDROM, & & & &CD-ROM& }, & { DRIVE_RAMDISK, & & &随机存取磁盘& }, & { 0, NULL},};int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]){ & if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { & & &cerr && _T(&Fatal Error: MFC initialization failed&) && & & &return -1; & } & // 获取逻辑驱动器字符串- a:\b:\c:\... 等. & // 还可以用GetLogicalDrives 以位图形式代替字符串形式获取信息 & TCHAR buf[100]; & DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf); & // 显示每个驱动器的信息 & // & string msg = &Logical Drives:\n&; &// STL string & for (TCHAR* s= *s; s+=_tcslen(s)+1) { & & &LPCTSTR sDrivePath = & & &msg += sDriveP & & &msg += & &; & & &// GetDriveType 获取枚举值,如DRIVE_UNKNOWN等. & & &// & & &UINT uDriveType = GetDriveType(sDrivePath);// 查找驱动器类型。在此我用了表(结构数组)来进行查找处理,过于繁琐了一些,// 但既然uDriveType 的值是连续的。// 我可以用DriveTypeFlags[uDriveType]来代替线性查找。在实际的编程中通常可以这么做:// if (uDriveType & DEVICE_CDROM) { & & & & ……// } & & &// & & &for (int i=0; DriveTypeFlags[i]. i++) { & & & & if (uDriveType == DriveTypeFlags[i].type) { & & & & & &msg += DriveTypeFlags[i]. & & & & & & & & & & } & & &} & & &msg += ''''''''''' & &
&&&主编推荐
&&&热门试卷
&&&最新视频
&&&热门阅读
&&&最新问答
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&湘教QS2-164&&增值电信业务经营许可证湘B2-

我要回帖

更多关于 光盘驱动器 的文章

 

随机推荐