zoukankan      html  css  js  c++  java
  • Win API学习笔记——文件系统(一·)

    文件系统用到的API:

    • GetLogicalDrives    获取主机中所有的逻辑驱动器,一Bit Map的形式返回
    • GetDriveType   获取驱动器类型
    • GetVolumeInformation()   获取驱动器信息

    获取驱动器根路径:

    • 创建一个数组  CHAR szLogicalDriveStrings[BUFSIZE]
    • 创建一个指针  PCHAR szDrive
    • 获取驱动器根路径GetLogicalDriveStrings(BUFSIZE - 1, szLogicalDriveStrings);
    • 创建一个函数,获取驱动器信息:GetDirverInfo();
      •   用GetDriveType(szDrive)获取驱动器类型。
      •   调用函数GetVolumeInformation(szDrive, szDirverName, MAX_PATH, &dwVolumeSerialNumber, &dwMaximumComponentLength,
          &dwFileSystemFlags, szFileSystemNameBuffer, BUFSIZE))

    Ctrl+F7 编译的时候没有错误,而F6生成解决方案的时候出现如下两个错误:

    • 1:error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用        MSVCRTD.lib       
    • 2: error LNK1120: 1 个无法解析的外部命令       

    解决方法:

    • (1)项目->属性->配置属性->C/C++ ->预处理器 中的【预处理器定义】 删除“_CONSOLE” 添加 “ _WINDOWS”
    • (2)项目->属性->配置属性->连接器->系统中的【子系统】设置为  控制台 (/SUBSYSTEM:CONSOLE)

    或DEBUG选择x64

    • (3)生成->重新生成解决方案
    BOOL GetDirverInfo(LPSTR szDrive) {
        UINT uDriveType;   //驱动器类型
        DWORD dwVolumeSerialNumber;     //卷序列号
        DWORD dwMaximumComponentLength;  //最大组件长度
        DWORD dwFileSystemFlags;   //文件系统标识
        CHAR szFileSystemNameBuffer[BUFSIZE];  //文件系统名称缓冲
        CHAR szDirverName[MAX_PATH]; //驱动器名称
                                     //最大字符长度的路径。
    
        std::cout << "
    " << szDrive << std::endl;
        uDriveType = GetDriveType(szDrive);  //获取驱动器的物理类型  该函数返回驱动器类型
    
        switch (uDriveType) {
        case DRIVE_UNKNOWN: //驱动器类型不确定
            std::cout << "The drive type cannot be determined.";
            break;
    
        case DRIVE_NO_ROOT_DIR:   //根目录无效,
            std::cout << "The root path is invalid,for example,no volume is mounted at the path";
            break;
    
        case DRIVE_REMOVABLE: //可移动设备, 比如U盘
            std::cout << "The drive is a type that has removable media,for example,a floppy drive or removable hard disk.";
            break;
    
        case DRIVE_FIXED: //固定的驱动;例如,一个硬盘或闪存驱动器
            std::cout << "The drive is a type that cannot be removed,for example,a fixed hard drive.";
            break;
    
        case DRIVE_REMOTE://远程(网络)驱动器
            std::cout << "The drive is a remote (network) drive.";
            break;
    
        case DRIVE_CDROM:  //cd - rom驱动器
            std::cout << "The drive is a CD-ROM drive.";
            break;
    
        case DRIVE_RAMDISK: //RAM磁盘
            std::cout << "The drive is a RAM disk.";
            break;
        } 
      if (!GetVolumeInformation(szDrive, szDirverName, MAX_PATH, &dwVolumeSerialNumber, &dwMaximumComponentLength,
            &dwFileSystemFlags, szFileSystemNameBuffer, BUFSIZE)) {                 //获取驱动器的相关属性
            return FALSE;
        }
    
    
  • 相关阅读:
    物联网架构成长之路(11)-Redis缓存主从复制
    物联网架构成长之路(10)-Nginx负载均衡
    物联网架构成长之路(9)-双机热备Keepalived了解
    物联网架构成长之路(8)-EMQ-Hook了解、连接Kafka发送消息
    2017年年度总结
    物联网架构成长之路(7)-EMQ权限验证小结
    物联网架构成长之路(6)-EMQ权限控制
    物联网架构成长之路(5)-EMQ插件配置
    物联网架构成长之路(4)-EMQ插件创建
    物联网架构成长之路(3)-EMQ消息服务器了解
  • 原文地址:https://www.cnblogs.com/Lan-ZC0803/p/9467554.html
Copyright © 2011-2022 走看看