vc 获取硬盘未指派的空间 vc 获取硬盘未指派的空间,若空间有多个需要,需要获取每个未被指派的空间的大小。怎样做 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 VC 获取磁盘分区总空间和剩余空间在编程的时候,我们有时候要知道磁盘的剩余空间和总空间,例如:制作一个安装程序的时候,必须获取来提醒用户该磁盘分区能否容纳得下安装程序所有的文件。案例我已经封装好一个函数了,函数的第一个参数是分区的名称,如 "C:\\" 第二第三个参数分别是总空间和剩余空间,注意: 这两个参数是CString引用类型的。BOOL OnGetDiskInformaiton(const CString LogicalDreverName,CString &strTotalGB,CString &strFreeGB){ ULARGE_INTEGER FreeAv,TotalBytes,FreeBytes; //获取信息 if(GetDiskFreeSpaceEx(LogicalDreverName,&FreeAv,&TotalBytes,&FreeBytes)) { //转化为MB long TotalMb=(long)(TotalBytes.QuadPart/1024/1024); long LeaveMb=(long)(FreeBytes.QuadPart/1024/1024); //转化为GB double TotalGB=(double)TotalMb/1024; double LeaveGB=(double)LeaveMb/1024; //格式化字符串 strTotalGB.Format(TEXT("%lfGB"),TotalGB); strFreeGB.Format(TEXT("%lfMB"),LeaveGB); return TRUE; } else { return FALSE; }} 该函数及控制码获取硬盘分区信息:BOOL DeviceIoControl( (HANDLE) hDevice, // handle to a partition IOCTL_DISK_GET_PARTITION_INFO, // dwIoControlCode (LPVOID) NULL, // lpInBuffer (DWORD) 0, // nInBufferSize (LPVOID) lpOutBuffer, // output buffer (DWORD) nOutBufferSize, // size of output buffer (LPDWORD) lpBytesReturned, // number of bytes returned (LPOVERLAPPED) lpOverlapped ); // OVERLAPPED structure BOOL DeviceIoControl( (HANDLE) hDevice, // handle to device IOCTL_DISK_GET_DRIVE_LAYOUT, // dwIoControlCode NULL, // lpInBuffer 0, // nInBufferSize (LPVOID) lpOutBuffer, // output buffer (DWORD) nOutBufferSize, // size of output buffer (LPDWORD) lpBytesReturned, // number of bytes returned (LPOVERLAPPED) lpOverlapped // OVERLAPPED structure);这是获取整个磁盘所有分区的信息 这个问题还真的不是很好回答。 现成的sdk 肯定没有。估计需要分析磁盘格式啥啥的.....建议找一个工具,逆向分析建议看看BOOTICE 请教一个MFC的基础问题。。。。。。。。。 CString GetBuffer 问题 谁有在CScrollView中用opengl绘图的例子? 请问了:一个很简单的问题(有分相送) 关于MFC和SDK 析构函数定义为虚函数有何好处? 祝jennyvenus新年快乐并在水园早得两星... 怎样用socket实现client/sever通信模型 如何在VC程序里面执行*.reg文件,而不是双击加入注册表? 一个初学者的问题?(哪位帮我一定给分!) 怎么得到当前使用输入法所对应的dll路径 PlgBlt在CDC::PlgBlt Image::PlgBlt CImage::PlgBlt比较
在编程的时候,我们有时候要知道磁盘的剩余空间和总空间,例如:制作一个安装程序的时候,必须获取来提醒用户该磁盘分区能否容纳得下安装程序所有的文件。案例
我已经封装好一个函数了,函数的第一个参数是分区的名称,如 "C:\\" 第二第三个参数分别是总空间和剩余空间,注意: 这两个参数是CString引用类型的。
BOOL OnGetDiskInformaiton(const CString LogicalDreverName,CString &strTotalGB,CString &strFreeGB)
{
ULARGE_INTEGER FreeAv,TotalBytes,FreeBytes;
//获取信息
if(GetDiskFreeSpaceEx(LogicalDreverName,&FreeAv,&TotalBytes,&FreeBytes))
{
//转化为MB
long TotalMb=(long)(TotalBytes.QuadPart/1024/1024);
long LeaveMb=(long)(FreeBytes.QuadPart/1024/1024);
//转化为GB
double TotalGB=(double)TotalMb/1024;
double LeaveGB=(double)LeaveMb/1024;
//格式化字符串
strTotalGB.Format(TEXT("%lfGB"),TotalGB);
strFreeGB.Format(TEXT("%lfMB"),LeaveGB);
return TRUE;
}
else
{
return FALSE;
}
}
BOOL DeviceIoControl( (HANDLE) hDevice, // handle to a partition
IOCTL_DISK_GET_PARTITION_INFO, // dwIoControlCode
(LPVOID) NULL, // lpInBuffer
(DWORD) 0, // nInBufferSize
(LPVOID) lpOutBuffer, // output buffer
(DWORD) nOutBufferSize, // size of output buffer
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped ); // OVERLAPPED structure
(HANDLE) hDevice, // handle to device
IOCTL_DISK_GET_DRIVE_LAYOUT, // dwIoControlCode
NULL, // lpInBuffer
0, // nInBufferSize
(LPVOID) lpOutBuffer, // output buffer
(DWORD) nOutBufferSize, // size of output buffer
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);这是获取整个磁盘所有分区的信息
建议找一个工具,逆向分析建议看看BOOTICE