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 << "\n" << 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;
    }

 


 

posted @ 2018-08-13 13:28  晓生寒  阅读(165)  评论(0编辑  收藏  举报