我的意思是实际使用运行该程序的用户的文件。
或者我必须手动检查可能的路径,如下表所示:https://en.wikipedia.org/wiki/Hosts_%28file%29#Location_in_the_file_system
答案 0 :(得分:1)
是否有API调用会显示给定系统上主机文件的位置?
不,没有这样的API调用。如果要访问它,您需要知道文件的位置。
答案 1 :(得分:1)
您无法使用Windows API调用来查找 hosts 文件所在的目录。但是,如问题中Wikipedia article中所述,该文件位于%SystemRoot%目录的固定子目录中。
您可以检索%SystemRoot%的完全限定路径名(与%WinDir% for NT-based systems相同),通过SHGetKnownFolderPath 调用FOLDERID_Windows KNOWNFOLDERID
以下代码在所有受支持的Windows版本上返回hosts文件的完全限定路径名:
#include <comdef.h>
#include <ShlObj.h>
#include <string>
std::wstring GetHostsPathName() {
wchar_t* systemRoot;
_com_util::CheckError( ::SHGetKnownFolderPath( FOLDERID_Windows,
0x0,
nullptr,
&systemRoot ) );
std::wstring hostsPathName( systemRoot );
::CoTaskMemFree( systemRoot );
systemRoot = nullptr;
hostsPathName.append( L"\\System32\\drivers\\etc\\hosts" );
return hostsPathName;
}