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