我编写了一个应用程序,它为我提供了有关磁盘的信息。但有一个例外。我把我的应用程序放在桌面C:
上。应用程序提供了关于pendrive
和磁盘E:
的正确信息,但不适用于磁盘C:
。当我在pendrive
上复制我的应用程序并运行它(从pendrive
)时,我得到了关于磁盘C:和E:的正确信息,但不适用于PENDRIVE。
问题出现在函数GetVolumeInformation
中。这个函数给了我错误的信息(只适用于我运行应用程序的磁盘)
GetVolumeInformation( ListItem, volumeNameBuffer, MAX_PATH, & volumeSerialNumber, & maximumComponentLength, & fileSystemFlags, fileSystemNameBuffer, MAX_PATH );
总之:我有关于所有磁盘的正确信息(磁盘类型、大小)和GetVolumeInformation函数中有关参数的错误信息,但仅适用于我运行应用程序的磁盘。错误的信息右侧信息
如果我将ListItem var设置为保持"C:",则代码成功。如果我将这个var设置为保持"D:",它将失败,FormatMessage
和GetLastError
报告:The filename, directory name, or volume label syntax is incorrect.
如果我将var设置为保持"D:/"或"D:\\",那么它就成功了。我的系统中存在的所有逻辑驱动器号也是如此。
仔细查看GetVolumeInformation
的文档,我们可以看到它期望的第一个参数是一个字符串,该字符串包含要描述的卷的根目录。因此,如果您只传递C:或D:etc,那么您传递的是相关驱动器的当前目录,该目录可能是根目录,也可能不是根目录。如果不是根,*轰!
此外,附带说明-卷序列号是一个32位数字,通常以十六进制表示。以下代码段以与dir
命令相同的方式对其进行格式化。
printf("Vol ser#: '%X-%X'n", (volumeSerialNumber>>16) , (volumeSerialNumber&0xFFFF) );
结果Vol ser#: 'AA25-7CEF'
与以下两者相比:
printf("Vol ser#: '%X'n", volumeSerialNumber );
(结果:Vol-ser#:'AA257CEF')
或
printf("Vol ser#: '%u'n", volumeSerialNumber );
(结果:卷序列号:'2854583535')