Domanda

In un'applicazione C++ Windows (XP e NT, se fa la differenza) su cui sto lavorando, ho bisogno di ottenere il nome di rete associato al computer su cui è in esecuzione il codice, in modo da poter convertire i nomi di file locali da C:\ nomefile.ext in \ ome_rete\C$ omefile.ext.Come potrei farlo?

In alternativa, se esistesse una funzione che eseguisse semplicemente la conversione che ho descritto, sarebbe ancora meglio.Ho esaminato WNetGetUniversalName, ma non sembra funzionare con i file locali (unità C).

È stato utile?

Soluzione

Avrai bisogno di GetComputerName di Win32:

http://msdn.microsoft.com/en-us/library/ms724295(VS.85).aspx

Altri suggerimenti

Esistono più di una alternative:

UN.Utilizzare GetComputerName() di Win32 come suggerito da Stu.
Esempio: http://www.techbytes.ca/techbyte97.html
O
B.Utilizzare la funzione gethostname() sotto Winsock.Questa funzione è multipiattaforma e può essere utile se la tua app verrà eseguita su altre piattaforme oltre a Windows.
Riferimento MSDN: http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx
O
C.Utilizzare la funzione getaddrinfo().
Riferimento MSDN: http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx

Sono d'accordo con Pascal sull'utilizzo della funzione gethostname() di Winsock.Ecco qui:

#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();

}

Se si desidera utilizzare solo il nome del computer locale (NetBIOS). GetComputerName funzione.Recupera solo il nome del computer locale stabilito all'avvio del sistema, quando il sistema lo legge dal registro.

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

Di più OttieniNomeComputer

Se desideri ottenere il nome host DNS, il nome di dominio DNS o il nome DNS completo, chiama il servizio GetComputerNameEx funzione.

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

Di più OttieniNomeComputerEx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top