Frage

In einer C++-Windows-Anwendung (XP und NT, wenn es einen Unterschied macht), an der ich arbeite, muss ich den Netzwerknamen abrufen, der dem Computer zugeordnet ist, auf dem der Code ausgeführt wird, damit ich lokale Dateinamen von C:\ konvertieren kann. Dateiname.ext nach \ etzwerkname\C$\Dateiname.ext.Wie würde ich das machen?

Alternativ wäre es sogar noch besser, wenn es eine Funktion gäbe, die nur die von mir beschriebene Konvertierung durchführt.Ich habe mir WNetGetUniversalName angesehen, aber das scheint mit lokalen Dateien (Laufwerk C) nicht zu funktionieren.

War es hilfreich?

Lösung

Sie benötigen GetComputerName von Win32:

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

Andere Tipps

Es gibt mehr als eine Alternative:

A.Verwenden Sie GetComputerName() von Win32, wie von Stu vorgeschlagen.
Beispiel: http://www.techbytes.ca/techbyte97.html
ODER
B.Verwenden Sie unter Winsock die Funktion gethostname().Diese Funktion ist plattformübergreifend und kann hilfreich sein, wenn Ihre App auf anderen Plattformen als Windows ausgeführt werden soll.
MSDN-Referenz: http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx
ODER
C.Verwenden Sie die Funktion getaddrinfo().
MSDN-Referenz: http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx

Ich stimme Pascal darin zu, die Funktion gethostname() von Winsock zu verwenden.Bitte schön:

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

}

Wenn Sie möchten, verwenden Sie nur den Namen des lokalen Computers (NetBIOS). GetComputerName Funktion.Es ruft nur den Namen des lokalen Computers ab, der beim Systemstart festgelegt wurde, wenn das System ihn aus der Registrierung liest.

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

Mehr über GetComputerName

Wenn Sie einen DNS-Hostnamen, einen DNS-Domänennamen oder den vollständig qualifizierten DNS-Namen erhalten möchten, rufen Sie an GetComputerNameEx Funktion.

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

Mehr über GetComputerNameEx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top