window API一天一练习之获取磁盘空间

来源:互联网 发布:招行香港一卡通 mac 编辑:程序博客网 时间:2024/05/22 10:55

     获取磁盘空间大小主要有两个API 。GetDiskFreeSpace 和GetDiskFreeSpaceEx。


BOOL WINAPI GetDiskFreeSpace(  _In_   LPCTSTR lpRootPathName,   _Out_  LPDWORD lpSectorsPerCluster,  _Out_  LPDWORD lpBytesPerSector,  _Out_  LPDWORD lpNumberOfFreeClusters,  _Out_  LPDWORD lpTotalNumberOfClusters);

lpRootPathName  // 磁盘根目录,如果为NULL则使用的是当前磁盘根目录

lpSectorsPerCluster  //是个指针,获取每簇的扇区数
lpBytesPerSector     //获取每个扇区的字节数
lpNumberOfFreeClusters  //空闲的簇数
lpTotalNumberOfClusters  //总共的簇数

使用GetDiskFreeSpaceEx可以避免使用算数来获取磁盘空间大小。
BOOL WINAPI GetDiskFreeSpaceEx(  _In_opt_   LPCTSTR lpDirectoryName,  _Out_opt_  PULARGE_INTEGER lpFreeBytesAvailable,  _Out_opt_  PULARGE_INTEGER lpTotalNumberOfBytes,  _Out_opt_  PULARGE_INTEGER lpTotalNumberOfFreeBytes);

lpDirectoryName       //磁盘目录
lpFreeBytesAvailable    //用户可以获取的磁盘空间大小
lpTotalNumberOfBytes    //磁盘的总空间大小,如果使用了用户配额,则用户获取的总空间大小可能小于磁盘真正的大小
lpTotalNumberOfFreeBytes    //磁盘空闲空间大小

参数类型

typedef union _ULARGE_INTEGER {  struct {    DWORD LowPart;    //低32位    DWORD HighPart;   //高32位  };  struct {    DWORD LowPart;  //低32位    DWORD HighPart;  //高32位  } u;  ULONGLONG QuadPart;    //64位无符号整型} ULARGE_INTEGER, *PULARGE_INTEGER;
如果你的主机支持64位整型数,则用QuadPart存储,否则用LowPart 和HighPart存储64位数值

void GetDiskSpaceInformation(LPSTR szDrive){printf("volume  %s \n",szDrive);DWORD64 dwAvailableByte, dwTotalNumberOfByte,dwFreeNumberOfByte;if (!GetDiskFreeSpaceEx(szDrive,(PULARGE_INTEGER)&dwAvailableByte,(PULARGE_INTEGER)&dwTotalNumberOfByte,(PULARGE_INTEGER)&dwFreeNumberOfByte)){printf("cannot get disk free space \n");}else{printf("GetSpace by GetDiskFreeSpaceEx()\n");printf("可用磁盘空间大小(字节): %I64d\n",dwAvailableByte);printf("磁盘空间总大小(字节) : %I64d\n",dwTotalNumberOfByte);printf("空闲磁盘空间总大小(字节) : %I64d\n",dwFreeNumberOfByte);}DWORD dwSectorsPerCluster,dwBytesPerSector,dwNumberOfFreeClusters,dwTotalNumberOfClusters;if (GetDiskFreeSpace(szDrive,&dwSectorsPerCluster,&dwBytesPerSector,&dwNumberOfFreeClusters,&dwTotalNumberOfClusters)){printf("GetSpace by GetDiskFreeSpace()\n");printf("每簇的扇区数: %d\n",dwSectorsPerCluster);printf("每个扇区的字节数 : %d\n",dwBytesPerSector);printf("空闲簇数 : %d\n",dwNumberOfFreeClusters);printf("总的簇数: %d\n",dwTotalNumberOfClusters);printf("磁盘空间总大小(字节) : %I64d\n",(DWORD64)dwTotalNumberOfClusters *(DWORD64)dwSectorsPerCluster * (DWORD64)dwBytesPerSector);printf("空闲磁盘空间总大小(字节) : %I64d\n",(DWORD64)dwNumberOfFreeClusters*(DWORD64)dwSectorsPerCluster * (DWORD64)dwBytesPerSector);}}
void GetDisksInformationEx(){printf("Begin Call GetDisksInformationEx()\n");CHAR szLogicalDriveString[BUFFERSIZE];PCHAR szDrive;ZeroMemory(szLogicalDriveString,BUFFERSIZE);GetLogicalDriveStrings(BUFFERSIZE - 1, szLogicalDriveString);szDrive = szLogicalDriveString;while (*szDrive){printf("volume %s\n",szDrive);GetDiskSpaceInformation(szDrive);szDrive += (lstrlen(szDrive) + 1);}printf("end Call GetDisksInformationEx()\n");}





原创粉丝点击