VC中如何获取当前计算机中所有逻辑驱动器的数目和盘符
来源:互联网 发布:心怀大局 知责有为 编辑:程序博客网 时间:2024/05/16 15:39
一般都用这两种方法获取本地磁盘盘符:
1. GetLogicalDriveStrings方法
TCHAR buf[100];
DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);
从名字上就知道GetLogicalDriveStrings是获得盘符的字符形式
这个函数将所有盘符都存在buf中,形式是这样:
"C:/<NULL>D:/<NULL>E:/<NULL><NULL>"
即盘符之间用NULL隔开,最后一个盘符后面跟两个NULL
所以可以这样从buf中提取单个盘符:
for (CString strDisks,TCHAR* s=buf; *s; s+=_tcslen(s)+1)
{
LPCTSTR sDrivePath = s; //单个盘符
strDisks += sDrivePath;
strDisks += " ";
}
2. GetLogicalDrives方法
DWORD dwDrives;
char a;
CString DriveName;
dwDrives = GetLogicalDrives();
a = 'A';
while (dwDrives > 0)
{
if (dwDrives % 2 == 1)
{
DriveName.Format("%c", a);
GetTreeCtrl().InsertItem(DriveName, m_nImageClose,
m_nImageOpen, TVI_ROOT, TVI_LAST);
}
a++;
dwDrives /= 2;
}
GetLogicalDrives函数返回一个DWORD值,4个字节32bit,每个bit代表一个盘符,比如bit0代表A盘,但是因为英文字母只有26个,所以最多可以表示26个盘符,不过,一般来说是够用了~~~~
其他-------------------------------------------------------------------------
//函数描述:函数名 Fresource_driveinfo
//功能:取驱动器信息
//参数描述: driveInfo存放取得的驱动器统计信息数组,
// length为数组实际存放项的
//返回值描述:返回值1表示正常,-1表示出错
short Fresource_driveinfo( Fdrive_info driveInfo[MAX1],int& length )
{
Fdrive_info DriveInfo;
memset( &DriveInfo, 0, sizeof( Fdrive_info ) );
DWORD dwBuffer=256;
char szBuffer[256];
memset( szBuffer, 0, dwBuffer );
int nSize = GetLogicalDriveStrings( dwBuffer, szBuffer );
if( nSize == 0 )
{
return -1;
}
char szDrivers[32][5];
memset( szDrivers, 0, 160 );
char szTemp[4];
memset( szTemp, 0, 4 );
int j=0;
int nLength=0; // 有几个盘符
for( int i=0; i<nSize; i++ )
{
if( szBuffer[i] == '/0' )
{
szTemp[j]='/0';
strcpy( szDrivers[nLength], szTemp );
UINT nDriver = GetDriveType( szDrivers[nLength] );
// 得到驱动器的信息
switch( nDriver )
{
case DRIVE_REMOVABLE: // 是否是软驱
break;
case DRIVE_CDROM:
break;
case DRIVE_FIXED:
strcpy( DriveInfo.drive_type, "硬盘" );
strcat( DriveInfo.drive_type, "DRIVE_FIXED" );
//GetVolumeInformation();
//DriveInfo.Partitiontype = ;
//strcpy( DriveInfo.drive_id, szDrivers[nLength] );
//DriveInfo.drive_size = ;
//GetDiskFreeSpace( szDrivers );
break;
case DRIVE_REMOTE:
break;
case DRIVE_RAMDISK:
break;
}
nLength++;
j=0;
continue;
}
szTemp[j]=szBuffer[i];
j++;
}
length = nLength;
return 1;
}
下面是另一个人的源码:
#define _WIN32_WINNT 0x0501
#include <windows.h>
#include <string.h>
#include <stdio.h>
#include <iostream>
#include <vector>
#include <tchar.h>
using namespace std;
int main(int argc, char *argv[])
{
//获得驱动器标识,调用GetLogicalDrivers()函数可以得到一个32位的DWORD类型的数字,其中每一位标识一个磁盘驱动器,为1表示此驱动器存在,为0表示不存在。磁盘驱动器从A盘开始编号。
DWORD dDriver = ::GetLogicalDrives();
vector<string> strVecDriver;
string strDriver = _T("A://");
UINT nPos = 0;
string strTemp;
while(dDriver)
{
if(dDriver & 1)
{
strTemp = _T('A') + nPos;
//用strTemp中是从0开始,长度为1的字符串替换本字符串中从0开始长度为1的字符串。
strTemp += "aaaa";
strDriver.replace(0,1,strTemp.c_str(),0,1);
strVecDriver.push_back(strDriver);
nPos++;
cout<<strDriver.c_str()<<endl;
}
else
{
nPos++;
}
//右移一位,来获得每一个磁盘的标识
dDriver>>=1;
}
}
- VC中如何获取当前计算机中所有逻辑驱动器的数目和盘符
- VC中获取当前计算机中所有逻辑驱动器的数目和盘符
- C/C++ 获取当前所有逻辑驱动器的根驱动器路径
- 找到当前所有逻辑驱动器的根驱动器路径
- 2017.07.02 获取系统中所有驱动器的根路径和驱动器属性(版本一)
- WinAPI: GetLogicalDriveStrings - 获取系统中存在的逻辑驱动器字符串
- 方法:如何获取操作系统所有分区(逻辑驱动器)
- 逻辑驱动器个数和盘符获取GetLogicalDrives和GetLogicalDriverStrings
- delphi获取当前计算机所有盘符
- VC中如何获取当前时间
- VC++中获取句柄的所有方法
- 如何在Matlab中获取函数参数的数目?
- ruby 中如何获取当前的文件名和目录
- 得到系统中有哪些逻辑驱动器的函数
- ProgressBar控件的应用;文件的读出和写入;目录和文件管理;检索计算机上逻辑驱动器盘符;XML文件的增加、修改、读节点内容
- C#控制台基础 获取电脑上的所有逻辑驱动器的名称,可用空间,总空间
- 快速获取当前数据库中每个表中的记录数目
- c#如何获取当前系统所有的字体和颜色?
- ubuntu 命令大全 (基本和meego是通用的)
- C# 接口
- 如何利用C#在XML 中添加 节点得到如下的格式 插3根鸡毛了
- 数据库转换工具(access excel 互换)
- JDBC连接数据库经验集萃
- VC中如何获取当前计算机中所有逻辑驱动器的数目和盘符
- “单播”“组播”和“多播”
- C#:30行数据插入到数据库中的效率测试-一行行执行、构造SQL一次执行、SqlBulkCopy
- MultiByteToWideChar,字符编码转换
- [.NET] MVC with .NET interface
- 打造自定义的 AfxMessageBox
- 【SQL基础用法】——行列转换
- 内核API笔记之IoBuildPartialMdl
- JDBC访问所有数据库的完整步骤