În C ++/Windows cum pot obține numele rețelei calculatorului pe care sunt pe computer?

Într-o aplicație C ++ Windows (XP și NT, dacă este diferită) pe care lucrez, trebuie să obțin numele de rețea asociat computerului pe care codul se execută, astfel încât să pot converti numele de fișiere locale din C: \ numele fișierului.ext la \\ numele rețelei \ C $ \ filename.ext. Cum aș face asta?

Alternativ, dacă există o funcție care va face conversia pe care am descris-o, ar fi chiar mai bună. M-am uitat în WNetGetUniversalName, dar asta nu pare să funcționeze cu fișiere locale (unitate C).

0
fr hi bn
+1 pentru tine. Prima dată când rezultatul meu Google a fost un post de suprapunere Stack. Multumesc tuturor.
adăugat autor theschmitzer, sursa

4 răspunsuri

Există mai multe alternative:

a. Use Win32's GetComputerName() as suggested by Stu.
Example: http://www.techbytes.ca/techbyte97.html
OR
b. Use the function gethostname() under Winsock. This function is cross platform and may help if your app is going to be run on other platforms besides Windows.
MSDN Reference: http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx
OR
c. Use the function getaddrinfo().
MSDN reference: http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx

0
adăugat
Din păcate, link-ul pentru a) (techbytes.ca) nu pare să mai fie disponibil.
adăugat autor lowglider, sursa

Veți avea nevoie de GetComputerName al Win32:

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

0
adăugat

Sunt de acord cu Pascal în folosirea funcției gethostname() a lui winsock. Poftim:

#include  //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
adăugat

Dacă doriți doar numele computerului local (NetBIOS) să utilizați funcția GetComputerName . Acesta retrivează numai numele computerului local care este stabilit la pornirea sistemului, când sistemul îl citește din registru.

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

More about GetComputerName

Dacă doriți să obțineți numele gazdei DNS, numele de domeniu DNS sau numele DNS complet calificat, apelați funcția GetComputerNameEx .

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

More about GetComputerNameEx

0
adăugat