GetLogicalDrives以及C ++的附加信息

时间:2013-01-07 13:45:39

标签: c++ winapi

我需要帮助我的一个程序,它可以在系统上提取可用的驱动器并打印有关驱动器的各种信息。我使用的是VC ++,对C ++来说还是一个新手,需要一些高级输入或经验丰富的程序员的示例代码。

以下是我当前的源代码:

#include "stdafx.h"
#include Windows.h 
#include stdio.h 
#include iostream 

using namespace std; 

int main()
{
    // Initial Dummy drive
    WCHAR myDrives[] = L" A";  

    // Get the logical drive bitmask (1st drive at bit position 0, 2nd drive at bit position 1... so on)  
    DWORD myDrivesBitMask = GetLogicalDrives();  

    // Verifying the returned drive mask  
    if(myDrivesBitMask == 0)   
        wprintf(L"GetLogicalDrives() failed with error code: %d\n", GetLastError());  
    else  { 
        wprintf(L"This machine has the following logical drives:\n");   
        while(myDrivesBitMask)     {      
            // Use the bitwise AND with 1 to identify 
            // whether there is a drive present or not. 
            if(myDrivesBitMask & 1)    {     
                // Printing out the available drives     
                wprintf(L"drive %s\n", myDrives);    
            }    
            // increment counter for the next available drive.   
            myDrives[1]++;    
            // shift the bitmask binary right    
            myDrivesBitMask >>= 1;   
        }   
        wprintf(L"\n");  
    }  
    system("pause");   
}

` - 这是输出 -

This machine has the following logical drives:
drive  C
drive  D
drive  E
drive  F
drive  G
drive  H
drive  I

我需要输出有关每个驱动器的其他信息(也许一个例子会在更短的时间内讲述故事):

驾驶 - C:\ 驱动器类型:固定 Drive Ready状态:正确 卷标:引导驱动器 文件系统类型:NTFS 自由空间:30021926912 总驱动器大小:240055742464

开车 - D:\ 驱动器类型:固定 Drive Ready状态:正确 卷标:应用数据 文件系统类型:NTFS 可用空间:42462507008 总驱动器尺寸:240054693888

我可以使用哪些方法,libs api等来提取驱动器类型,驱动器状态,卷标,文件系统类型,可用空间和总驱动器大小?

*旁注,我注意到我的预处理器指令存在缺陷,特别是在标准I / O头文件中。我知道这不是推荐的方法,使用printf和cout是类型安全的,并且正确的路线,但我无法弄清楚如何在cout中格式化输出,就像你在wprintf(L"drive %s\n", myDrives);.... so how would you do this with cout??中所做的那样

提前致谢。

2 个答案:

答案 0 :(得分:2)

您希望查看GetVolumeInformation等函数来检索文件系统信息,例如可用空间和卷名。

GetDriveType将为您提供有关驱动器类型的一些基本信息,但USB拇指杆和闪存读取器可以提供令人惊讶的结果。

我不确定你的“准备状态”是什么意思。如果您的意思是驱动器中是否存在有效卷,则可以尝试使用路径为“\\。\ C:”的CreateFile来尝试打开卷。如果失败则没有卷(磁盘)存在。这将用于SD卡读卡器。要在没有出现错误对话框的情况下执行此操作,您需要先调用SetErrorMode(SEM_NOOPENFILEERRORBOX)

答案 1 :(得分:0)

要检查驱动器是否准备就绪,您还可以使用GetDiskFreeSpaceEx。如果此操作失败,则驱动器未准备就绪/可用。

以下是一些示例代码:http://pinvoke.net/default.aspx/coredll/GetDiskFreeSpaceEx.html