Windows API 磁盤

這裏的磁盤就是你的C,D,E,F,G盤啦web

那麼來看看吧windows Api來獲取信息的呢
(1)DWORD GetLogicalDrives(void)
返回值是一個32位整形
32位每一位表示一個對應的驅動器是否存在,第2位是1表示B:存在。。
(2) DWORD GetLogicalDriveStrings(DWORD nBufferLength,LPTSTR lpBuffer);
nBufferLength:指向內存的大小(簡單來講就多少個CHAR)
lpBuffer:存儲返回結果字符串的內存空間(簡單來講CHAR的位置)
返回值:表示是否成功,成功返回緩衝區中返回結果的總長度.若是返回值大於第一個參數表示設置的緩衝區大小不夠, 返回0表示出錯
例子
CHAR szLogicalDriveStrings[BUFSIZE];
PCHAR szDrive;
ZeroMemory(szLogicalDriveStrings,BUFSIZE);
GetLogicalDriveStrings(BUFSIZE-1,szLogicalDriveStrings);
szDrive = (PCHAR)szLogicalDriveStrings;
do
{
GetDirverInfo (szDrive);//得到屬性
cout<<szDrive<<endl;
szDrive+=(lstrlen(szDrive)+1);
}while(*szDrive != '\x00');
//這裏遍歷得到的是「C:\」...
(3)HANDLE FindFirstVolume(LPTSTR lpszVolumeName,DWORD cchBufferLength);
BOOL FindNextVolume(HANDLE hFindVolume,LPTSTR lpszVolumeName,DWORD cchBufferLength);
hFindVolume,使用的的是FindFirstVolume得到HANDLE,
lpszVolumeName,指向保存驅動器名的內存緩衝區
cchBufferLength,參數是lpszVolumeName所指向的緩衝區大小,以字節爲單位
例子
hVol= FindFirstVolume (buf,BUFSIZE);
if(hVol  == INVALID_HANDLE_VALUE){
printf(TEXT("NO volumes found!\n"));
return -1;
}
GetDirverInfo (szDrive) // 得到屬性
while(FindNextVolume(hVol,buf,BUFSIZE)){
GetDirverInfo (szDrive) ;// 得到屬性
}
// 須要注意一點的 就是這裏的結果和用getLogicalDriveStrings的結果不同,這裏返回的是\\?\Volume{GUID}形式的
(4)BOOL GetVolumeInformation(
LPCTSTR   lpRootPathName,//指向所要得到屬性的驅動器的根路徑字符串(就是(2),(3)遍歷完單個的字符串)
LPTSTR lpVolumeNameBuffer,//返回驅動器名
DWORD nVolumeNameSize,//lpVolumeNameBuffer的內存緩衝區大小
LPDWORD lpVolumeSerialNumber,//存儲驅動器序列號
LPDWORD lpMaximumComponentLength,//返回文件系統所支持的文件組成部分的最大值
LPDWORD lpFileSystemFlags,//屬性用來判斷多種驅動器屬性值,WinNT.h裏面,FILE_開頭的
LPTSTR lpFileSystemNameBuffer,//表示文件系統類型
DWORD nFileSystemNameSize//lpFileSystemNameBuffer的緩衝
);
例子
void GetDirverInfo (LPSTR szDrive){
DWORD dwVolumeSerialNumber;
DWORD dwMaximumComponentLength;
DWORD dwFileSystemFlags;
CHAR szFileSystemNameBuffer[BUFSIZE];
CHAR szDirveName[MAX_PATH];
GetVolumeInformation(szDrive,szDirveName,MAX_PATH,
&dwVolumeSerialNumber,&dwMaximumComponentLength,
&dwFileSystemFlags,szFileSystemNameBuffer,BUFSIZE);
}
 
 
 
如今介紹的API,簡單來講就是給你的盤一個快捷鍵。(操做驅動器掛載點)
(1)HANDLE FindFirstVolumeMountPoint(LPTSTR lpszRootPathName,LPTSTR lpszVolumeMountPoint,
DWORD cchBufferLength);
BOOL FindNextVolumeMountPoint(HANDLE hFindVolumeMountPoint,lpszVolumeMountPoint,DWORD cchBufferLength);
lpszRootPathName,指定要查找的卷名,必須以反斜杆結尾
lpszVolumeMountPoint,找到第一個掛載點
cchBufferLength,用來儲存輸出掛載點的緩存的大小
hFindVolumeMountPoint,查找句柄,由FindFirstVolumeMountPoint獲取
(2)BOOL FindVolumeMountPointClose(HANDLE hFindVolumeMountPoint)關閉卷句柄
(3)BOOL GetVolumeNameForVolumeMountPoint(LPCTSTR lpsVolumeMountPoint,LPTSTR lpszVolumeName,DWORD cchBufferLength);
BOOL SetVolumeMouthPoint(LPTSTR lpszVolumeMountPoint,LPCTSTR lpszVolumeName)
lpszVolumeMountPoint:指定須要查找掛載點或者根目錄
lpszVolummeName:掛載點對應的卷設備名,"\\?\Volume{GUID}".
cchBufferLength:用來儲存輸出設備名的緩存大小
 
string轉換成LPCTSTR類型
string s = "";
LPCTSTR lpctstr=s.c_str();
 
 
獲取磁盤分區的總容量、空閒容量、簇、扇區信息
(1)BOOL  GetDiskFreeSpace(
LPCTSTR lpRootPathName,//指向所要獲取磁盤空間信息的分區根路徑字符串
LPDWORD lpSectorsPerCluster,//指向存儲每簇區數的DWORD類型變量
LPDWORD lpBytesPerSector,//指向存儲每扇區字節數的DWORD類型變量
LPDWORD lpNumberOfFreeClusters,//指向存儲空閒簇的DWORD類型變量
LPDWORD lpTotalNumberOfClusters//指向存儲總簇數的DWORD類型變量
)
例子:
DWORD dwSectPerClust,dwBytesPerSect,
dwFreeClusters,dwTotalClusters;
BOOL  bResult = GetDiskFreeSpace(
pszDrive,
&dwSectPerClust,
&dwBytesPerSect,
&dwFreeClusters,
&dwTotalClusters
);
說明下所得的值怎麼算
空閒的簇數量*每簇的扇區數量*每扇區的容量=空閒空間總字節(參數1*參數2*參數3)
總簇數量 *每簇的扇區數量*每扇區的容量=磁盤總字節(參數1*參數2*參數4)
 
(2)BOOL GetDiskFreeSpaceEx(
PCTSTR lpDire,//指向所要獲取磁盤空間信息的磁盤分區根路徑字符串
PULARGE_INTEGER lpFreeBytesAvailable,//指向用於存儲可得到的總字節數量的變量
PULARGE_INTEGER lpTotalNumberOfBytes,//指向存儲磁盤空間總字節數據的變量
PULARGE_INTEGER lpTotalNumberOfFreeBytes//存儲磁盤空閒空間總字節的變量
)
例子:
DWORD64 qwFreeBytesToCaller,qwTotalBytes,qwFreeBytes;
DWORD dwSectPerClust,dwBytesPerSect,dwTotalClusters;
BOOL bResult = GetDiskFreeSpaceEx(pszDrive,
(PULARGE_INTEGER)&qwFreeBytesToCaller,
(PULARGE_INTEGER)&qwTotalBytes,
(PULARGE_INTEGER)&qwFreeBytes);
能夠直接獲得字節數
相關文章
相關標籤/搜索