用C++编程获取驱动器盘符(二)

来源:互联网 发布:知止而后有定的意思 编辑:程序博客网 时间:2024/05/18 20:50

这里通过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!");       }}



原创粉丝点击