如何用编程获取CD-ROM的驱动器盘符?

2016-01-29 12:18 30 1 收藏

如何用编程获取CD-ROM的驱动器盘符?,如何用编程获取CD-ROM的驱动器盘符?

【 tulaoshi.com - C语言心得技巧 】

如何用编程获取CD-ROM的驱动器盘符?



作者:赵湘宁

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

下载源代码


[提出问题]
    最近我正在开发一个程序,任务是从CD-ROM上读取文件,如视频和音频文件。因为每一台机器上的情况都不一样。如何知道CD-ROM驱动器呢?


[解答]
    首先,一台机器可能有不止一个CD-ROM驱动器。现在CD-ROM已经是PC机的标准配置,此外再装个可擦写的光盘驱动,甚至是DVD都是很常见的事情。不管一台机器上装多少个不同的驱动器,如何找到它们呢?
    有关驱动器的函数有GetLogicalDrives,GetLogicalDriveStrings和GetDriveType。前两个用来获取逻辑驱动器盘符,GetLogicalDriveStrings返回路径名字符串,如:

      "A:<nullC:<nullF:<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__;#endifusing namespace std; // for string class// 下面是一个GetDriveType返回码与人可读字符串的迷你对照表//struct {   UINT type;        // GetDriveType返回码类型   LPCSTR name;      // 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") << endl;      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=buf; *s; s+=_tcslen(s)+1) {      LPCTSTR sDrivePath = s;      msg += sDrivePath;      msg += " ";      // GetDriveType 获取枚举值,如DRIVE_UNKNOWN等.      //      UINT uDriveType = GetDriveType(sDrivePath);// 查找驱动器类型。在此我用了表(结构数组)来进行查找处理,过于繁琐了一些,// 但既然uDriveType 的值是连续的。// 我可以用DriveTypeFlags[uDriveType]来代替线性查找。在实际的编程中通常可以这么做:// if (uDriveType & DEVICE_CDROM) {         ……// }      //      for (int i=0; DriveTypeFlags[i].name; i++) {         if (uDriveType == DriveTypeFlags[i].type) {            msg += DriveTypeFlags[i].name;            break;         }      }      msg += '''''''''''
                        

来源:http://www.tulaoshi.com/n/20160129/1485539.html

延伸阅读
在驱动器的根目录之下建立Autorun.inf文件可以更改该驱动器的图标,其格式为: [autorun] ICON=驱动器名 路径 Icon图标文件全名 基于这样的原理,我们可以在VB程序中轻松实现此任务。以更改驱动器D的图标为例:新建标准EXE工程,添加一个按钮和一个公共对话框,然后拷贝如下代码。 PrivateSubCommand1_Click() ...
  注:只有一个磁带驱动器 磁带操作命令: 1.重新拉紧磁带 mt -f /dev/rmt/0 retension 2.回绕磁带 mt -f /dev/rmt/0 rewind 3.显示磁带驱动器状态 mt -f /dev/rmt/0 status tar命令: 使用tar命令复制文件或者目录树到单个磁带。优点:在UNIX系统中都可用。缺点:不知道文件系统...
在编写某些Windows管理应用程序时,能够从自定义的驱动器选择列表框中进行选择无疑是非常专业的,使用Delphi或者C++的早期版本时我们都必须使用Win32所提供的许多关于获取磁盘信息的API函数来分别获取像卷标、序列号以及剩余空间等信息,现在我们将使用.Net框架和WMI(Windows Management Instrumentation - Windows 管理规范 )来实现上述...
如何给win7驱动器加密   操作步骤 1、 单击开始按钮,在搜索栏输入bit,然后打开bitlocker驱动器加密。 2、 选择一个你想进行加密的磁盘,单击启动bitlocker。 3、 选择加密方式,我选的是密码加密,常规方法,输入密码。 4、 保存恢复密钥,防止用户忘记。 5、 选择保存路径,以txt文本文档的...
Bitlocker驱动器加密怎么用   Bitlocker加密简介: Bitlocker简单来说这个组件是通过一种软硬结合的方式 (BitLocker与硬件TPM芯片配合)共同保护硬盘数据,最大亮点就在于即便将硬盘串接到其他电脑上,也休想读取任何信息。BitLocker不但能够为任意分区加密,而且还加入了对U盘、移动硬盘的加密支持,而这也被称之为Bitlocker ...

经验教程

607

收藏

100
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部