我写的应用程序给了我关于我的磁盘的信息。但有一个例外。我将我的应用程序保存在桌面C:
上。应用程序向我提供有关pendrive
和磁盘E:
但不是磁盘C:
的正确信息。
当我在pendrive
上复制我的应用程序并运行它(从pendrive
)时 - 我得到关于磁盘C:和E的正确信息:但不是为了PENDRIVE。
问题在于功能GetVolumeInformation
。这个函数给我错误的信息(仅适用于我运行我的应用程序的磁盘)
GetVolumeInformation( ListItem, volumeNameBuffer, MAX_PATH, & volumeSerialNumber, & maximumComponentLength, & fileSystemFlags, fileSystemNameBuffer, MAX_PATH );
总结: 我有关于所有磁盘的正确信息(DISK TYPE,SIZE) 关于来自GetVolumeInformation函数的参数的错误信息,但仅适用于我运行应用程序的磁盘。 wrong info right info
答案 0 :(得分:1)
如果我将ListItem var设置为保持“C:”,则代码成功。如果我将此var设置为保持“D:”,则会失败,FormatMessage
和GetLastError
报告:The filename, directory name, or volume label syntax is incorrect.
如果我改为将var设置为“D:/”或“D:\\”,那么它就会成功。对于我系统中存在的所有逻辑驱动器号也是如此。
仔细查看GetVolumeInformation
的文档,我们可以看到它所期望的第一个参数是一个字符串,用于保存要描述的卷的根目录 。因此,如果您只是传递C:或D:等,则传递相关驱动器的当前目录,该目录可能是也可能不是根目录。如果它不是根,*繁荣*!
另外,在旁注中 - 卷序列号是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 );
(结果: Vol ser#:'2854583535')