C++/Windows에서 현재 사용 중인 컴퓨터의 네트워크 이름을 어떻게 알 수 있나요?
-
08-06-2019 - |
문제
작업 중인 C++ Windows(XP 및 NT, 차이가 있는 경우) 응용 프로그램에서는 C:\에서 로컬 파일 이름을 변환할 수 있도록 코드가 실행되는 컴퓨터와 연결된 네트워크 이름을 가져와야 합니다. 파일 이름.ext를 \ etwork_name\C$\filename.ext로 변경합니다.어떻게 해야 할까요?
또는 제가 설명한 변환만 수행하는 함수가 있다면 훨씬 더 좋을 것입니다.WNetGetUniversalName을 살펴봤지만 로컬(C 드라이브) 파일에서는 작동하지 않는 것 같습니다.
해결책
Win32의 GetComputerName이 필요합니다.
http://msdn.microsoft.com/en-us/library/ms724295(VS.85).aspx
다른 팁
하나 이상의 대안이 있습니다:
ㅏ.Stu가 제안한 대로 Win32의 GetComputerName()을 사용하십시오.
예: http://www.techbytes.ca/techbyte97.html
또는
비.Winsock에서 gethostname() 함수를 사용하십시오.이 기능은 크로스 플랫폼이며 앱이 Windows 이외의 다른 플랫폼에서 실행될 경우 도움이 될 수 있습니다.
MSDN 참조: http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx
또는
씨.getaddrinfo() 함수를 사용합니다.
MSDN 참조: http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx
나는 Winsock의 gethostname() 함수 사용에 대해 Pascal의 의견에 동의합니다.여기 있습니다:
#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
);
자세히 알아보기 컴퓨터 이름 가져오기
DNS 호스트 이름, DNS 도메인 이름 또는 정규화된 DNS 이름을 얻으려면 GetComputerNameEx
기능.
BOOL WINAPI GetComputerNameEx(
_In_ COMPUTER_NAME_FORMAT NameType,
_Out_ LPTSTR lpBuffer,
_Inout_ LPDWORD lpnSize
);
자세히 알아보기 GetComputerNameEx