文件系统用到的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; }