2008-08-14 3 views
7

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

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

+0

+1 к вам. В первый раз мой результат Google был столбом переполнения. Спасибо всем. – theschmitzer 2008-12-08 20:17:58

ответ

9

Есть более одной альтернативы:

а. Используйте WinCom's GetComputerName(), как предложено Stu.
Пример: http://www.techbytes.ca/techbyte97.html
OR
b. Используйте функцию gethostname() под Winsock. Эта функция кросс-платформенная и может помочь, если ваше приложение будет запущено на других платформах, кроме Windows.
MSDN Номер ссылки: http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx
OR
c. Используйте функцию getaddrinfo().
MSDN reference: http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx

+0

К сожалению, ссылка для a) (techbytes.ca), похоже, больше не доступна. – lowglider 2013-03-13 10:34:27

1

Я согласен с Pascal в использовании функции 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(); 

} 
0

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

 Смежные вопросы

  • Нет связанных вопросов^_^