• 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;
        }
    
    
  • 相关阅读:
    Fixed Function Shader
    sqlserver 2014 数据库作业 通过脚本创建注意事项
    块存储、文件存储、对象存储意义及差异
    程序员如何成为架构师
    那些编程水平很高的程序员是怎么练成的?
    在ASP.NET Core调用WebService
    .net core 调用webservice同步方法
    Sqlserver中如何创建链接服务器
    JWT实现鉴权
    JWT原理实现代码
  • 原文地址:https://www.cnblogs.com/Lan-ZC0803/p/9467554.html
Copyright © 2020-2023  润新知