用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);
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);
解决方案 »
- BoundsCheckerv8.2版本使用出错:'WatchListErrorCoed = ErrorDoesNotExist'
- 关于select的问题
- 求助串口"似乎我的串口接收的数据有丢失或我的程序有问题"
- 一个关于列表框的小问题
- 请问使用异步SOCEKT在读数据时候,如何能向同步的SOCKET可以把数据循环读完?
- CListCtrl 几点经验
- 急求不使用SMTP服务器,直接发信的VC源码
- 请问3D建模如何导入到可视化开发软件中
- VC OLEDB调用Oracle存储过程,获取结果
- 不是按Unicode编写的程序,怎么显示Unicode中文文字?
- 高分相送:请大家帮我参考一下,这套软件我应该报价多少?(急急急!!!)0
- 是我太笨,还是vc太难?
还想问一句,我想得到整个该硬盘的容量??而不仅是c盘,能有办法判断吗?
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;
根据我原来已进行过的测试,以上代码对scsi无效