用GetDiskFreeSpace,请看下段:
DWORD dwSectorsPerCluster,  //每簇的扇区数 
      dwBytesPerSector;     //每扇区的字节数
DWORD dwFreeClusters,   //磁盘的空簇数 
      dwClusters;       //磁盘的簇数
DWORD dwTotalDiskSpace,  //全部磁盘空间(按字节计) 
      dwFreeDiskSpace,   //未使用空间(按字节计) 
      dwUseDiskSpace;    //已使用空间(按字节计) GetDiskFreeSpace("C:\\", &dwSectorPerCluster, &dwBytesPerSector, &dwFreeCluster, &dwClusters); //取得C盘的磁盘信息。"C:\\"是C盘的根目录//以下是计算磁盘空间:
dwTotalDiskSpace = dwSectorsPerCluster * dwBytesPerSector * dwClusters;dwFreeDiskSpace = dwSectorsPerCluster * dwBytesPerSector * dwFreeClusters;dwUsedDiskSpace = dwSectorsPerCluster * dwBytesPerSector * (dwClusters - dwFreeClusters);

解决方案 »

  1.   

    thank In355Hz  先加2
    还想问一句,我想得到整个该硬盘的容量??而不仅是c盘,能有办法判断吗?
      

  2.   

    可以用DeviceIoControlDeviceIoControl(HANDLE jDevice, DWORD dwIoControlCode, LPVOID lpvInBuffer, DWORD cbInBuffer, LPVOID lpvOutBuffer, DWPRD cbOutBuffer, LPDWORD lpcbBytesReturned, LPOVERLAPPED lpOverlapped);如果要获取物理硬盘的句柄,可以如下调用CreateFile:
    hDevide=CreateFile("\\\\.\\PhysicalDriveN",0,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);其中N代表用户系统上的一个硬盘。系统的第一个硬盘N是0("\\\\.\\PhysicalDrive0")。
    一旦有了一个有效的设备句柄就可以把它作为第一个参数传给DeviceIoControl。她的第二个参数是传给设备的命令,要取得磁盘几何信息,可以是:
    IOCTL_DISK_GET_DRIVE_GEOMETRY
    这时,必须分配一个DISK_GEOMETRY结构:
    typedef struct _DISK_GEOMETRY {
      MEDIA_TYPE MediaType;       //大概是磁盘类型,见下面MEDIA_TYPE说明
      LARGE_INTEGER Cylinders;    //64位整数返回柱面数
      DWORD TracksPerCylinder;    //每柱面的磁道数
      DWORD SectorsPerTrack;      //每磁道的扇区数
      DWORD BytesPerSector;       //每扇区的字节数
    }
    并把它的地址和大小传给lpvOutBuffer和cbOutBuffer.而且还必须分配一个DWORD变量作为lpcbBytesReturned参数用来取得拷贝如lpvOutBuffer的字节数。DeviceIoControl的其他参数可置为0或NULL;
    此外,LARGE_INTEGER 为64位整数值(怎么用?我也没用过,天知道)
    typedef union _LARGE_INTEGER { 
        struct {
            DWORD LowPart; 
            LONG  HighPart; 
        };
        LONGLONG QuadPart;
    } LARGE_INTEGER; 
     
    MEDIA_TYPE为:
    typedef enum _MEDIA_TYPE { 
        Unknown,                // Format is unknown 
        F5_1Pt2_512,            // 5.25", 1.2MB,  512 bytes/sector 
        F3_1Pt44_512,           // 3.5",  1.44MB, 512 bytes/sector 
        F3_2Pt88_512,           // 3.5",  2.88MB, 512 bytes/sector 
        F3_20Pt8_512,           // 3.5",  20.8MB, 512 bytes/sector 
        F3_720_512,             // 3.5",  720KB,  512 bytes/sector 
        F5_360_512,             // 5.25", 360KB,  512 bytes/sector 
        F5_320_512,             // 5.25", 320KB,  512 bytes/sector 
        F5_320_1024,            // 5.25", 320KB,  1024 bytes/sector 
        F5_180_512,             // 5.25", 180KB,  512 bytes/sector 
        F5_160_512,             // 5.25", 160KB,  512 bytes/sector 
        RemovableMedia,         // Removable media other than floppy 
        FixedMedia              // Fixed hard disk media 
    } MEDIA_TYPE; 
    然后根据获得的DISK_GEOMETRY 结构就可以算得硬盘的容量。
    大概是:
      64位柱面数 * TracksPerCylinder * SectorsPerTrack * BytesPerSector;
      

  3.   

    very thank?
    根据我原来已进行过的测试,以上代码对scsi无效
      

  4.   

    收回一部分,将PhysicalDriveN改为ScsiN////但好象只在winnt win2000中别人采用这种代码,在win9x中都用其他方法