磁盘和驱动器管理API
GetLogicalDrivers获取主机中所有的逻辑驱动器,以BitMap的形式返回.
GetLogicalDriverString获取主机中所有的逻辑驱动器,以驱动器根路径字符串返回.
FindFirstVolume查找主机中的第一个驱动器,返回查找句柄.
FindNextVolume根据FindFirstVolume返回句柄,查找主机中后继的逻辑驱动器
FindVolumeClose关闭驱动器查找句柄
GetDriveType获取驱动器类型
GetVolumeInformation获取逻辑驱动器信息
FindFirstVolumeMountPoint查找指定卷的第一个挂载点,返回查找句柄
FindNextVolumeMountPoint 根据FindFirstVolumeMountPoint返回的句柄,查找卷的后继挂载点.
FindVolumeMountPointClose 关闭挂载点查找句柄
GetVolumeNameForVolumeMountPoint 根据指定挂载点获取相应的卷设备名
SetVolumeMountPoint将指定卷挂载到指定挂载点处
GetDiskFreeSpace获取磁盘空间信息,包括每簇的扇区数,每扇区的字节数,簇数量,空闲的簇数量
GetDiskFreeSpaceEx获取用户可用的空闲空间的字节数,磁盘总容量的字节数
原型:DWORD GetLogicalDrivers (void);
说明:函数返回值是一个long型,将其用二进制显示时,其中第0位表示A盘,第1位表示B盘,当某位为1时说明存在这个盘,即00000011表示有A盘和B盘。
文章图片
2:GetLogicalDriverString获取主机中所有的逻辑驱动器,以驱动器根路径字符串返回.
// operation_disk.cpp : Defines the entry point for the console application. //
#include "stdafx.h" #include
int _tmain(int argc, _TCHAR* argv[]) { int i=0;
TCHAR buff[32] = {0};
DWORD dw=GetLogicalDriveStrings(0,NULL);
LPTSTR lpDriveStrings = buff;
//=(LPTSTR)HeapAlloc(GetProcessHeap(),0,dw*sizeof(TCHAR));
GetLogicalDriveStrings(dw,lpDriveStrings);
scanf("%d",&i);
return 0;
}
文章图片
// operation_disk.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include
#include
#include
#include
#include
int _tmain(int argc, _TCHAR* argv[])
{
int i=0;
TCHAR buff[32] = {0};
char c_buff[32] = {0};
DWORD dw=GetLogicalDriveStrings(0,NULL);
LPTSTR lpDriveStrings = buff;
//=(LPTSTR)HeapAlloc(GetProcessHeap(),0,dw*sizeof(TCHAR));
GetLogicalDriveStrings(dw,lpDriveStrings);
memcpy(c_buff,buff,32);
char *p_buff = &c_buff[0];
for(int i = 0;
i< 32;
i++)
{
printf("%c",*p_buff);
p_buff = &c_buff[i];
//p_buff = NULL;
}
scanf("%d",&i);
return 0;
}
结果:
文章图片
【对硬盘操作的API介绍以及应用测试】3:FindFirstVolume查找主机中的第一个驱动器,返回查找句柄.
文章图片
// operation_disk.cpp : Defines the entry point for the console application. //
#include "stdafx.h" #include
int _tmain(int argc, _TCHAR* argv[]) { int i=2;
DWORDError= ERROR_SUCCESS;
HANDLE FindHandle= INVALID_HANDLE_VALUE;
BOOLSuccess= FALSE;
WCHARVolumeName[MAX_PATH] = L"";
//MAX_PATH260 // //Enumerate all volumes in the system. FindHandle = FindFirstVolumeW(VolumeName, ARRAYSIZE(VolumeName));
if (FindHandle == INVALID_HANDLE_VALUE) { Error = GetLastError();
wprintf(L"FindFirstVolumeW failed with error code %d\n", Error);
return -1;
} printf("查找到的第一个卷的GUID路径为:\n");
for (int i=0;
i<256;
i++) { printf("%c",VolumeName[i]);
}
while(1) { memset(VolumeName, 0 , ARRAYSIZE(VolumeName));
Success = FindNextVolumeW(FindHandle, VolumeName, ARRAYSIZE(VolumeName));
if ( !Success ){ Error = GetLastError();
if (Error != ERROR_NO_MORE_FILES){ wprintf(L"FindNextVolumeW failed with error code %d\n", Error);
break;
} break;
} printf("查找到的第[%d]个卷的GUID路径为:\n",i);
i++;
for (int i=0;
i<256;
i++) { printf("%c",VolumeName[i]);
} } FindVolumeClose(FindHandle);
//关闭驱动器查找句柄
scanf("%d",&i);
return 0;
}
4:GetDriveType获取驱动器类型
文章图片
文章图片
文章图片
// operation_disk.cpp : Defines the entry point for the console application. //
#include "stdafx.h" #include
void rew(UINT bResult) { switch(bResult) { case DRIVE_UNKNOWN:printf("可获得驱动器类型为【无法识别的设备】\n", bResult);
break;
case DRIVE_NO_ROOT_DIR:printf("可获得驱动器类型为【给出的名字不存在,不存在的驱动器】\n", bResult);
break;
case DRIVE_REMOVABLE:printf("可获得驱动器类型为【可移动设备】\n", bResult);
break;
case DRIVE_FIXED:printf("可获得驱动器类型为【不可移动的磁盘】\n", bResult);
break;
case DRIVE_REMOTE:printf("可获得驱动器类型为【网络硬盘】\n", bResult);
break;
case DRIVE_CDROM:printf("可获得驱动器类型为【CD光驱】\n", bResult);
break;
case DRIVE_RAMDISK:printf("可获得驱动器类型为【内存虚拟盘】\n", bResult);
break;
default: printf("programError\n");
break;
} }
int _tmain(int argc, _TCHAR* argv[]) { int i=0;
UINT bResult = 0;
LPCTSTR buff = _T("c:\\");
//使用GetDiskFreeSpaceEx获取磁盘信息并打印结果bResult = GetDriveType (buff);
printf("C盘:");
rew(bResult);
bResult = GetDriveType (_T("d:\\"));
printf("D盘:");
rew(bResult);
bResult = GetDriveType (_T("e:\\"));
printf("E盘:");
rew(bResult);
bResult = GetDriveType (_T("f:\\"));
printf("F盘:");
rew(bResult);
bResult = GetDriveType (_T("g:\\"));
printf("G盘:");
rew(bResult);
bResult = GetDriveType (_T("h:\\"));
printf("H盘:");
rew(bResult);
scanf("%d",&i);
return 0;
}
5:GetDiskFreeSpaceEx获取用户可用的空闲空间的字节数,磁盘总容量的字节数
文章图片
// operation_disk.cpp : Defines the entry point for the console application. //
#include "stdafx.h" #include
int _tmain(int argc, _TCHAR* argv[]) { int i=0;
DWORD64 qwFreeBytesToCaller = 0, qwTotalBytes = 0, qwFreeBytes = 0;
DWORD dwSectPerClust = 0, dwBytesPerSect = 0, dwFreeClusters = 0,dwTotalClusters = 0;
BOOL bResult = 0;
//使用GetDiskFreeSpaceEx获取磁盘信息并打印结果bResult = GetDiskFreeSpaceEx (_T("c:\\"),(PULARGE_INTEGER)&qwFreeBytesToCaller,(PULARGE_INTEGER)&qwTotalBytes,(PULARGE_INTEGER)&qwFreeBytes);
printf("可获得的空闲空间(GB): \t%I64d\n", qwFreeBytesToCaller/(1024*1024*1024));
printf("空闲空间(字节): \t\t%I64d\n", qwFreeBytes);
printf("磁盘总容量(字节): \t\t%I64d\n", qwTotalBytes);
scanf("%d",&i);
return 0;
}
6:GetDiskFreeSpace获取磁盘空间信息,包括每簇的扇区数,每扇区的字节数,簇数量,空闲的簇数量
文章图片
// operation_disk.cpp : Defines the entry point for the console application. //
#include "stdafx.h" #include
int _tmain(int argc, _TCHAR* argv[]) { int i=0;
DWORD dSectorsPerCluster=0;
//每簇的扇区数 DWORD dBytesPerSector=0;
//每个扇区的字节数 DWORD dNumberOfFreeClusters=0;
//可用簇数 DWORD dTotalNumberOfClusters=0;
//总的簇数 LPCWSTR pc = 0;
if (GetDiskFreeSpace(_T("c:\\"),&dSectorsPerCluster,&dBytesPerSector,&dNumberOfFreeClusters,&dTotalNumberOfClusters)){ printf("每蔟的扇区数为%d\n",dSectorsPerCluster);
printf("每个扇区的字节数为%d\n",dBytesPerSector);
printf("可用簇数为%d\n",dNumberOfFreeClusters);
printf("总的簇数为%d\n",dTotalNumberOfClusters);
}else{ printf("error");
}
scanf("%d",&i);
return 0;
}
7:GetVolumeInformation获取硬盘信息
文章图片
// operation_disk_mfc.cpp : Defines the entry point for the console application. //
#include "stdafx.h" #include "operation_disk_mfc.h"
#ifdef _DEBUG #define new DEBUG_NEW #endif
// The one and only application object
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0;
HMODULE hModule = ::GetModuleHandle(NULL);
if (hModule != NULL) { // initialize MFC and print and error on failure if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0)) { // TODO: change error code to suit your needs _tprintf(_T("Fatal Error: MFC initialization failed\n"));
nRetCode = 1;
} else { // TODO: code your application's behavior here.
int i;
/*LPWSTR lpVolumeNameBuffer = 0;
LPDWORDSerialNumber = 0;
DWORD nVolumeNameSize = 0;
GetVolumeInformation( _T("c:"),lpVolumeNameBuffer,255,SerialNumber,&MaxCLength,&FileSysFlag,FileSysName,255);
*/ DWORDVolumeSerialNumber = 0;
TCHARVolumeName[256] = _T("");
if (GetVolumeInformation( _T("d:\\"),VolumeName,12,&VolumeSerialNumber,NULL,NULL,NULL,10) < 0) { printf("D盘error\n");
} printf( "D盘的序列号:%lu\n ",VolumeSerialNumber);
VolumeSerialNumber = 0;
if (GetVolumeInformation( _T("c:\\"),VolumeName,12,&VolumeSerialNumber,NULL,NULL,NULL,10) < 0) { printf("c盘error\n");
} printf( "C盘的序列号:%lu\n ",VolumeSerialNumber);
scanf("%d",&i);
} } else { // TODO: change error code to suit your needs _tprintf(_T("Fatal Error: GetModuleHandle failed\n"));
nRetCode = 1;
}
return nRetCode;
}
8: