#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <windows.h>
#include <cstring>
#include "atlstr.h"
using namespace std;
char *ConstCharToChar(const char* CStr)
{
DWORD dwLen = GetLogicalDriveStrings(0, NULL); //獲取系統字串長度.
char *c1 = new char[dwLen]; //構建一個相應長度的陣列.
DWORD i = 0;
for (i = 0; i < dwLen; i++)
{
if (CStr[i] == '\0')/*檢測源陣列元素是否為空,YES,執行賦值,NO,退出*/
break;
else
c1[i] = CStr[i];
}
return c1;
}
int main()
{
char driveType[21] = { 0 };
UINT nType;
DWORD dwLen = GetLogicalDriveStrings(0, NULL); //獲取系統字串長度.
char *pszDriver;// = new char[dwLen]; //構建一個相應長度的陣列.
//string pathFormat1;
const char* lPath;
for (char a = 'A'; a <= 'Z'; a++)
{
//pathFormat1 = a + ":\\";
//pszDriver = StrToChar(pathFormat1);
lPath = a + ":\\" + '\0';
pszDriver = ConstCharToChar(lPath);
CString str = CString(pszDriver);
LPWSTR wpszDriver = new WCHAR[str.GetLength() + 1];
//wcscpy((LPTSTR)wpszDriver, T2W((LPTSTR)str.GetBuffer(NULL)));
wcscpy_s((LPWSTR)wpszDriver, strlen(pszDriver) + 1, T2W((LPWSTR)str.GetBuffer(NULL)));
//mbstowcs(wpszDriver, pszDriver, strlen(pszDriver) + 1);//Plus null
str.ReleaseBuffer();
cout << "%c:\\" << a << "\t"<< endl;
nType = GetDriveType(wpszDriver);
if (nType != DRIVE_NO_ROOT_DIR) // DRIVE_NO_ROOT_DIR: 路徑無效
{
switch (nType)
{
case DRIVE_FIXED:
strcpy_s(driveType, "硬碟");
break;
case DRIVE_REMOVABLE:
strcpy_s(driveType, "移動硬碟");
break;
case DRIVE_CDROM:
strcpy_s(driveType, "光碟");
break;
case DRIVE_RAMDISK:
strcpy_s(driveType, "RAM盤");
break;
case DRIVE_REMOTE:
strcpy_s(driveType, "Remote(Network) drive 網路磁盤");
break;
case DRIVE_UNKNOWN:
default:
strcpy_s(driveType, "未知盤");
break;
}
cout << wpszDriver << "\t" << driveType << endl;
}
}
getchar();
return 0;
}
lPath = a + ":\\" + '\0';在這一步的時候數值不對,請問應該怎么寫才能正確遍歷電腦所有的盤?
uj5u.com熱心網友回復:
僅供參考:#include "stdafx.h"
using namespace std;
struct {
UINT type; LPCSTR name;
} DriveTypeFlags [] = {// GetDriveType回傳碼與人可讀字串對照表
{DRIVE_UNKNOWN ,"未知" },
{DRIVE_NO_ROOT_DIR ,"無效路經" },
{DRIVE_REMOVABLE ,"可移動" },
{DRIVE_FIXED ,"固定" },
{DRIVE_REMOTE ,"網路驅動器" },
{DRIVE_CDROM ,"CD-ROM" },
{DRIVE_RAMDISK ,"隨機存取磁盤"},
{0 , NULL },
};
int _tmain() {
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) {
cerr << _T("Fatal Error: MFC initialization failed") << endl;
return -1;
}
// 獲取邏輯驅動器字串- a:\<null>b:\<null>c:\<null>...z:\<null><null>
// 還可以用GetLogicalDrives以位圖形式代替字串形式獲取資訊
TCHAR buf[200];
DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);
string msg = "邏輯驅動器:\n";
for (TCHAR* s=buf; *s; s+=_tcslen(s)+1) {
LPCTSTR sDrivePath = s;
msg += sDrivePath;
msg += " ";
UINT uDriveType = GetDriveType(sDrivePath);
for (int i=0; DriveTypeFlags[i].name; i++) {
if (uDriveType == DriveTypeFlags[i].type) {
msg += DriveTypeFlags[i].name;
break;//
}
}
msg += '\n';
}
cout << msg.c_str();
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/277179.html
標籤:C++ 語言
上一篇:求助,請問這個函式哪里有問題
下一篇:資料結構小白請教各位大佬一個問題
