2008-08-14 21 views
7

En una aplicación C++ Windows (XP y NT, si hace una diferencia) en la que estoy trabajando, necesito obtener el nombre de red asociado con la computadora en la que se está ejecutando el código, para poder convertir nombres de archivo locales de C : \ filename.ext to \\ network_name \ C $ \ filename.ext. ¿Cómo haría esto?En C++/Windows, ¿cómo obtengo el nombre de red de la computadora en la que estoy?

Alternativamente, si hay una función que solo hará la conversión que describí, sería incluso mejor. Busqué en WNetGetUniversalName, pero parece que no funciona con los archivos locales (unidad C).

+0

1 a usted. La primera vez que mi resultado de google fue una publicación de Stack Overflow. Gracias a todos. – theschmitzer

Respuesta

9

Hay más de uno alternativas:

a. Use GetComputerName() de Win32 como lo sugiere Stu.
Ejemplo: http://www.techbytes.ca/techbyte97.html
O
b. Use la función gethostname() bajo Winsock. Esta función es multiplataforma y puede ayudar si su aplicación se ejecutará en otras plataformas además de Windows.
Referencia de MSDN: http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx
O
c. Use la función getaddrinfo().
Referencia de MSDN: http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx

+0

Desafortunadamente, el enlace para a) (techbytes.ca) ya no parece estar disponible. – lowglider

1

Estoy de acuerdo con Pascal en el uso de la función gethostname() de winsock. Aquí van:

#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

Si desea sólo el nombre del equipo (NetBIOS) local utiliza GetComputerName función. Recupera solo el nombre de la computadora local que se establece al inicio del sistema, cuando el sistema lo lee desde el registro.

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

Más sobre GetComputerName

Si desea obtener el nombre de host DNS, nombre de dominio DNS o el nombre DNS completo llamar a la función GetComputerNameEx.

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

Más sobre GetComputerNameEx

Cuestiones relacionadas