В приложении на C ++ Windows (XP и NT, если это имеет значение), над которым я работаю, мне нужно получить сетевое имя, связанное с компьютером, на котором выполняется код, чтобы я мог преобразовывать локальные имена файлов из C: \ filename.ext to \\ network_name \ C $ \ filename.ext. Как бы я это сделал?
В качестве альтернативы, если есть функция, которая будет просто выполнять преобразование, которое я описал, это было бы еще лучше. Я посмотрел в WNetGetUniversalName, но, похоже, он не работает с локальными файлами (диск C).
Вам понадобится Win32 GetComputerName:
http://msdn.microsoft.com/en-us/library/ms724295(VS.85).aspx
Есть несколько вариантов:
а. Используйте 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
Я согласен с Паскалем в использовании функции 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();
}
Если вы хотите только имя локального компьютера (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