Как получить сетевое имя компьютера, на котором я работаю, в C ++ / Windows?

В приложении на C ++ Windows (XP и NT, если это имеет значение), над которым я работаю, мне нужно получить сетевое имя, связанное с компьютером, на котором выполняется код, чтобы я мог преобразовывать локальные имена файлов из C: \ filename.ext to \\ network_name \ C $ \ filename.ext. Как бы я это сделал?

В качестве альтернативы, если есть функция, которая будет просто выполнять преобразование, которое я описал, это было бы еще лучше. Я посмотрел в WNetGetUniversalName, но, похоже, он не работает с локальными файлами (диск C).

14.08.2008 14:37:27
4 ОТВЕТА
РЕШЕНИЕ

Вам понадобится Win32 GetComputerName:

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

7
14.08.2008 14:40:31

Есть несколько вариантов:

а. Используйте Win32 GetComputerName (), как предложено Stu.
Пример: http://www.techbytes.ca/techbyte97.html
ИЛИ
b. Используйте функцию gethostname () под Winsock. Эта функция является кроссплатформенной и может помочь, если ваше приложение будет работать на других платформах, кроме 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

9
14.08.2008 15:22:23
К сожалению, ссылка для a) (techbytes.ca) больше не доступна.
lowglider 13.03.2013 10:34:27

Я согласен с Паскалем в использовании функции gethostname () winsock. Ну вот:

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

}
1
8.12.2014 18:53:25

Если вы хотите только имя локального компьютера (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

1
8.10.2015 07:04:58