2008-08-14 23 views
7

在我正在使用的C++ Windows(XP和NT,如果它有所不同)应用程序中,我需要获取与正在执行代码的计算机关联的网络名称,以便我可以将本地文件名从C :\ filename.ext为\\ network_name \ C $ \ filename.ext。我将如何做到这一点?在C++/Windows中,我如何获取正在使用的计算机的网络名称?

或者,如果有一个函数可以完成我描述的转换,那会更好。我查看了WNetGetUniversalName,但这似乎不适用于本地(C盘)文件。

+0

+1你。第一次我的谷歌结果是堆栈溢出帖子。 谢谢大家。 – theschmitzer 2008-12-08 20:17:58

回答

9

有多个备选方案:

一个。按照Stu的建议使用Win32的GetComputerName()。
例如:http://www.techbytes.ca/techbyte97.html

b。使用Winsock下的函数gethostname()。此功能是跨平台的,并且可能会有所帮助,前提是您的应用程序要在Windows以外的其他平台上运行。
MSDN参考:http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx

c。使用函数getaddrinfo()。
MSDN参考:http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx

+0

不幸的是,a)(techbytes.ca)的链接似乎不再可用。 – lowglider 2013-03-13 10:34:27

1

我同意帕斯卡使用winsock的gethostname()函数。 在这里你去:

#include <winsock2.h> //of course this is the way to go on windows only 

#pragma comment(lib, "Ws2_32.lib") 

void GetHostName(std::string& host_name) 
{ 
    WSAData wsa_data; 
    int ret_code; 

    char buf[MAX_PATH]; 

    WSAStartup(MAKEWORD(1, 1), &wsa_data); 
    ret_code = gethostname(buf, MAX_PATH); 

    if (ret_code == SOCKET_ERROR) 
     host_name = "unknown"; 
    else 
     host_name = buf; 


    WSACleanup(); 

} 
0

如果你想在本地计算机的只有名称(NetBIOS)使用GetComputerName功能。它仅回收在系统启动时建立的本地计算机名称,当系统从注册表读取它时。

BOOL WINAPI GetComputerName(
    _Out_ LPTSTR lpBuffer, 
_Inout_ LPDWORD lpnSize 
); 

更多GetComputerName

如果你想获得DNS主机名,DNS域名,或完全合格的DNS名称调用GetComputerNameEx功能。

BOOL WINAPI GetComputerNameEx(
    _In_ COMPUTER_NAME_FORMAT NameType, 
    _Out_ LPTSTR    lpBuffer, 
    _Inout_ LPDWORD    lpnSize 
); 

更多GetComputerNameEx

相关问题