如何获取系统驱动器的盘符?

18

如何在Windows操作系统上找到主硬盘的驱动器字母?

换句话说,就是那个带有Program FilesSystem32等文件夹的硬盘。


1
不要假设程序会在“\Program Files”中,或者系统文件会在“\Windows\System32”中 - 有API调用可以检索这些和更多的确切路径... - Shog9
你能给我一个API调用的例子,这样我就可以研究它们吗? 我想要查找与程序相关的某些文件。 - danile oanas
http://msdn.microsoft.com/en-us/library/ms724373.aspx ... http://msdn.microsoft.com/en-us/library/bb762181.aspx - Shog9
5个回答

32

有一个名为SystemDrive的环境变量,它被设置为系统驱动器(出乎意料吧)。您可以使用getenv()函数来获取它。

char *sysDrive = getenv ("SystemDrive");
if (sysDrive == NULL) {
    // vote me down.
} else {
    // vote me up and use it.
}

此页面列出了大量的环境变量,如果您不能依赖于系统驱动器上存在特定目录,则可以使用它们。

或者,使用Windows API调用SHGetSpecialFolderPath()并传递正确的CSIDL。然后,您就不必依赖于环境变量。

尽管请注意这些页面已被 Vista 中的其他函数取代(因为此函数将成为新函数的包装器),但它仍应该能够工作。


5
API调用GetWindowsDirectory可能会有所帮助。您可以使用API进一步解析此信息,以解析驱动器字母信息。

我应该使用哪些 API 来“进一步解析”GetWindowsDirectory()的结果? - unixman83
只需获取Windows目录路径的第一个字母。 - Michael J

2

系统驱动器

程序文件

系统根目录

Windows目录

不要假设程序文件和Windows安装在同一驱动器上。它通常是这样。通常。


5
你应该提到,大写字母表示的是 Windows 环境变量的名称。 - unixman83

1

使用函数_dupenv_s获取系统驱动器字母。

getenv "函数不是线程安全的[并发-mt-unsafe]""此函数或变量可能不安全。请考虑改用_dupenv_s。" - VS2019编译器警告(级别3)C4996。

#include <iostream>

int main()
{
    char* system_drive{ nullptr };
    size_t count{ 0 };

    // _dupenv_s is a Microsoft function, designed as a more secure form of getenv:
    _dupenv_s(&system_drive, &count, "SystemDrive");

    std::cout << "system drive: " << system_drive << std::endl;

    // Note: It is the calling program's responsibility to free the memory by calling free:
    free(system_drive);
}

输出:

system drive: C:

0

请参阅MSDN上的获取系统信息。它详细解释了如何获取系统信息,非常有用。


你需要使用代码标签和换行符格式化答案。 - Alan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接