• Windows API 磁盘


    这里的磁盘就是你的C,D,E,F,G盘啦

    那么来看看吧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! "));
    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);
    可以直接得到字节数
  • 相关阅读:
    【前端】用百度BAE和express部署自己的node后台
    【前端】JavaScript中prototype和__proto__的区别
    【其他】Objective-C 内存管理学习总结
    【Unity3D】Unity3D 让角色的头部望向鼠标
    【Unity3D】Unity3D 摄像机带透明截图
    【前端】前端冷知识
    【Unity3D】Unity3D SkinnedMeshRenderer换装系统
    【前端】HTML中最适合做按钮的元素
    IEnumerable和IEnumerator 详解 分类: C# 2014-12-05 11:47 18人阅读 评论(0) 收藏
    LINQ to Entities
  • 原文地址:https://www.cnblogs.com/kenter/p/3259543.html
Copyright © 2020-2023  润新知