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

王朝vc·作者佚名  2006-01-17
窄屏简体版  字體: |||超大  

如何用编程获取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_FILE

static char THIS_FILE[] = __FILE__;

#endif

using 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

程序代码很简单,它是一个MFC程序。用GetLogicalDriveStrings获取所有逻辑驱动器的根路径名,然后调用GetDriveType来确定每个驱动器的类型。如果你要找CD-ROM,则检查uDriveType = DRIVE_CDROM就可以了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航