取得硬盘大小的问题

kindo 2008-11-20 11:48:18
C++练手,做一个硬盘信息小程序,关于取得硬盘空间问题被难倒了。代码如下:


DWORD dwDrive;
INT nDrive;

dwDrive = GetLogicalDrives();
char dName[4];
CString d;

/*取得硬盘空间*/
PULARGE_INTEGER _lpFreeBytesAvailable = 0, _lpTotalNumberOfBytes = 0, _lpTotalNumberOfFreeBytes = 0;
for ( nDrive = 0 ; nDrive < 26 ; nDrive++ ){
if ( dwDrive & (1 < < nDrive) ){
sprintf(dName, "%c: ",(nDrive + 'A '));
d = CString(dName);
if(GetDiskFreeSpaceEx(d,(PULARGE_INTEGER)&_lpFreeBytesAvailable,(PULARGE_INTEGER)&_lpTotalNumberOfBytes,
(PULARGE_INTEGER)&_lpTotalNumberOfFreeBytes))
{
printf( "%2s %I64i %I64d %I64d\n ",d, lpFreeBytesAvailable,_lpTotalNumberOfBytes ,_lpTotalNumberOfFreeBytes);
}
}
}
}

-==================================
问题在于,取得盘符没问题,取得的大小觉得怪怪的,请问该怎么修理啊
谢谢大家了。
...全文
103 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kindo 2008-11-20
  • 打赏
  • 举报
回复
谢谢1楼的朋友,不过想用微软给出的函数去做。
就呆在云上 2008-11-20
  • 打赏
  • 举报
回复
给你一个google得到的:
/*取得IDE/EIDE接口硬盘的参数信息*/     
void ide_para(unsigned char *buff)
{
unsigned char *p;
int i;
unsigned int flag2;
unsigned char flag;

p=buff;
outportb(0x1f6,0xa0);
outportb(0x1f7,0xec);
while(flag!=0x58)
flag=inportb(0x1f7);
for(i=0;i<256;i++) /*读出256字节的信息*/
{
flag2=inport(0x1f0);
*p++=(flag2<<8)>>8; /*把且出的字分割成两个字节*/
*p++=(flag2>>8);
}
printf("\n\r柱面数=%d",(int)(buff[3]*256+buff[2]));
printf("\n\r磁头数=%d",(int)(buff[7]*256+buff[6]));
printf("\n\r扇区数=%d",(int)(buff[0x0d]*256+buff[0x0c]));
printf("\n\r硬盘出厂编号=");
/*读出的信息中的两个字节位置颠倒,显示时反转*/
for(i=20;i<40;i++)
if(i%2==0)
printf("%c",buff[i+1]);
else
printf("%c",buff[i-1]);
printf("\n\r硬盘类型=");
for(i=54;i<94;i++)
if(i%2==0)
printf("%c",buff[i+1]);
else
printf("%c",buff[i-1]);
return;
}
kindo 2008-11-20
  • 打赏
  • 举报
回复
自己搞定了

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧