当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

<b>若何用编程获得CD-ROM的驱动器盘符</b>[VC/C++编程]

赞助商链接



  本文“<b>若何用编程获得CD-ROM的驱动器盘符</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

[提出问题]

近来我正在开辟一个程序,任务是从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 << _T("Fatal Error: MFC initialization failed") << endl;
   return -1;
  }
  // 获得逻辑驱动器字符串- a::c:... 等.
  // 还可以用GetLogicalDrives 以位图情势替换字符串情势获得信息
  TCHAR buf[100];
  DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);
  // 显示每个驱动器的信息
  //
  string msg = "Logical Drives:
"; // 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 += ''''''''''''''''
'''''''''''''''';
  }
  cout << msg.c_str();
  return 0;
}

程序代码很简单,它是一个MFC程序.用GetLogicalDriveStrings获得全部逻辑驱动器的根途径名,然后调用GetDriveType来肯定每个驱动器的范例.假如你要找CD-ROM,则查抄uDriveType = DRIVE_CDROM便可以了.

本文配套源码


  以上是“<b>若何用编程获得CD-ROM的驱动器盘符</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        100%(1)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .