丹阳企业网站建设/友链是什么
这里通过GetLogicalDriveStrings函数获取驱动器盘符
函数原型:
DWORD GetLogicalDriveStrings(DWORD cchBuffer,LPTSTR lpszBuffer)
功能:以字符串的形式获取当前系统中所有逻辑驱动器盘符。
获取字符串的格式为:每个驱动器盘符的名字都用一个NULL字符分隔,在最后一个名字后面用两个NULL表示中止(空中止)
例如C:\NULLD:\NULLE:\NULLF:\NULLNULL
参数:
cchBuffer:缓冲区的大小
lpszBuffer:用于装载逻辑驱动器名称的字符串缓冲区
控制台程序示例:
#include "stdafx.h"
#include <STRING>
#include <TCHAR.H>
#include <WINDOWS.H>int main(int argc, char* argv[])
{// 获取实际存储驱动器号的字符串长度DWORD dw = ::GetLogicalDriveStrings(0, NULL);// 申请内存空间(即存储字符串的缓冲区)LPSTR lpDriveString = (LPSTR)HeapAlloc( GetProcessHeap(), 0, dw * sizeof(DWORD) );// 获取驱动器盘符(返回值为:获取字符串的长度,不包括最后一个NULL的长度)DWORD dwSize = GetLogicalDriveStrings(dw, lpDriveString);while(lpDriveString!=0){// 创建一个指向lpDriveString的引用,目的:通过查找lpDriveString中的“:\\”子串,来判断是否还有盘符输出std::string &strTemp = (std::string)lpDriveString;// find:查找“:\\”子串,如果没有找到,就返回string::npos值if (strTemp.find(":\\") == std::string::npos)break;// 打印盘符printf("%s\n", lpDriveString);// 在lpDriveString中查找0,,如果找到,返回0在lpDriveString中的位置,否则返回NULLlpDriveString=_tcschr(lpDriveString,0)+1;}return 0;
}
MFC程序示例:
void CADlg::OnButton1()
{// TODO: Add your control notification handler code hereDWORD dwNumBytesForDrivesString;HANDLE hHeap;LPSTR lp;CString strLogdrive;//获取实际存储驱动器号的字符串长度dwNumBytesForDrivesString=GetLogicalDriveStrings(0,NULL)*sizeof(TCHAR);//如果字符串不为空,则表示有正常的驱动器存在if (dwNumBytesForDrivesString!=0){//非配字符串空间hHeap=GetProcessHeap();lp=(LPSTR)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,dwNumBytesForDrivesString);//获取标明所有驱动器的字符串GetLogicalDriveStrings(HeapSize(hHeap,0,lp),lp);//将驱动器一个个输出while(lp!=0){ if (((CString)lp).Find(":\\")==-1){return;}MessageBox(lp);lp=_tcschr(lp,0)+1;}}else{MessageBox("Can't User The Function GetLogicalDriveStrings!");}
}