获取磁碟详细信息的问题

NorthPBear 2008-03-18 11:20:43
小弟写了一段 关于获取计算机 磁碟信息的代码
想通过如下代码 实现 分辨 硬盘 优盘 光驱等等

int GetLogiDrv()
{
int DrivesCount=0; //磁碟计数器
DWORD DrivesInfo=GetLogicalDrives();
while (DrivesInfo)
{
if (DrivesInfo&1)
DrivesCount++;
DrivesInfo=DrivesInfo>>1; //向右偏移1位,读取下一位.
}
cout<<"当前逻辑驱动器数量是:"<<DrivesCount<<endl;
return (0);
}

int GetLogiDrvTp()
{
DWORD LogiDrvStrInfo=GetLogicalDriveStrings(0,NULL);
cout<<"当前驱动器字符串信息是:"<<LogiDrvStrInfo<<endl;
char* TpInfo=new char[LogiDrvStrInfo]; //在堆区建立字符传数组;

GetLogicalDriveStrings(LogiDrvStrInfo,TpInfo); //拷贝到TpInfo中

int DrvType=GetDriveType(TpInfo);
cout<<"当前驱动器标识代号是:"<<DrvType<<endl;
//3是硬盘,5是光驱;
return (0);
}

int GetDrvSpa()
{
// float DrvSpa=GetDiskFreeSpaceEx();
return (0);
}

main ()
{
CopyRight();
GetLogiDrv();
GetLogiDrvTp();
}



但是发现 似乎输出的不太对.
还有就是 如何获取获取磁盘剩余空间信息

请教高人
...全文
81 6 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tsocpp 2008-03-19
  • 打赏
  • 举报
回复
GetDiskFreeSpace();

用法查msdn吧
星羽 2008-03-19
  • 打赏
  • 举报
回复


磁盘空间

#include <windows.h>
#include <stdio.h>

typedef BOOL (WINAPI *PGETDISKFREESPACEEX)(LPCSTR,
PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER);

BOOL MyGetDiskFreeSpaceEx(LPCSTR pszDrive)
{
PGETDISKFREESPACEEX pGetDiskFreeSpaceEx;
__int64 i64FreeBytesToCaller, i64TotalBytes, i64FreeBytes;

DWORD dwSectPerClust,
dwBytesPerSect,
dwFreeClusters,
dwTotalClusters;

BOOL fResult;

pGetDiskFreeSpaceEx = (PGETDISKFREESPACEEX) GetProcAddress(
GetModuleHandle("kernel32.dll"),
"GetDiskFreeSpaceExA");

if (pGetDiskFreeSpaceEx)
{
fResult = pGetDiskFreeSpaceEx (pszDrive,
(PULARGE_INTEGER)&i64FreeBytesToCaller,
(PULARGE_INTEGER)&i64TotalBytes,
(PULARGE_INTEGER)&i64FreeBytes);

// Process GetDiskFreeSpaceEx results.
if(fResult)
{
printf("Total free bytes = %I64d\n", i64FreeBytes);
}
return fResult;
}

else
{
fResult = GetDiskFreeSpaceA (pszDrive,
&dwSectPerClust,
&dwBytesPerSect,
&dwFreeClusters,
&dwTotalClusters);

// Process GetDiskFreeSpace results.
if(fResult)
{
printf("Total free bytes = I64d\n",
dwFreeClusters*dwSectPerClust*dwBytesPerSect);
}
return fResult;
}
}
int main(int argc, char *argv[])
{
MyGetDiskFreeSpaceEx ("C");
}


星羽 2008-03-19
  • 打赏
  • 举报
回复

没什么问题啊

#include "windows.h"
#include "iostream"
using namespace std;

int GetLogiDrv()
{
bool drives[32] = { false };
int i = 0;

int DrivesCount=0; //磁碟计数器
DWORD DrivesInfo=GetLogicalDrives();
while (DrivesInfo)
{
if (DrivesInfo&1)
{
DrivesCount++;
drives[i] = true;
}
i++;
DrivesInfo=DrivesInfo>>1; //向右偏移1位,读取下一位.

}
cout<<"当前逻辑驱动器数量是:" <<DrivesCount<<" (";
for (i = 0; i < 32; ++i)
if (drives[i])
cout<<(char)('A' + i)<<": ";
cout<<" )"<<endl;

return (0);
}

int GetLogiDrvTp()
{
DWORD LogiDrvStrInfo=GetLogicalDriveStrings(0,NULL);

char* TpInfo=new char[LogiDrvStrInfo]; //在堆区建立字符传数组;

GetLogicalDriveStrings(LogiDrvStrInfo,TpInfo); //拷贝到TpInfo中
cout <<"当前驱动器字符串信息是:" <<TpInfo <<endl;
int DrvType=GetDriveType(TpInfo);
cout <<"当前驱动器标识代号是:" <<DrvType <<endl;
//3是硬盘,5是光驱;
return (0);
}

int GetDrvSpa()
{
float DrvSpa=GetDiskFreeSpaceEx();
return (0);
}

int main ()
{
//CopyRight();
GetLogiDrv();
GetLogiDrvTp();
return 0;
}



Supper_Jerry 2008-03-18
  • 打赏
  • 举报
回复
http://download.csdn.net/source/146571源代码
ryfdizuo 2008-03-18
  • 打赏
  • 举报
回复
GetDiskFreeSpace() 
或者
GetDiskFreeSpaceEx()

具体用法查一查参考手册或者帮助文件
hejun548 2008-03-18
  • 打赏
  • 举报
回复
用DeviceIocontrol发送命令获取,但是前提是要知道它的HANDLE.
相关推荐
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-03-18 11:20
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下