8

私が取り組んでいる C++ Windows (違いがある場合は XP と NT) アプリケーションでは、ローカル ファイル名を C:\ から変換できるように、コードが実行されているコンピューターに関連付けられているネットワーク名を取得する必要があります。 filename.ext を \\network_name\C$\filename.ext にします。どうすればいいですか?

あるいは、私が説明した変換を行うだけの関数があれば、それはさらに良いでしょう. WNetGetUniversalName を調べましたが、ローカル (C ドライブ) ファイルでは機能しないようです。

4

4 に答える 4

9

複数の選択肢があります。

を。Stu の提案に従って、Win32 の GetComputerName() を使用します。
例: http://www.techbytes.ca/techbyte97.html
または
b. Winsock で関数 gethostname() を使用します。この関数はクロス プラットフォームであり、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

于 2008-08-14T15:22:23.067 に答える
7

Win32 の GetComputerName が必要になります。

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

于 2008-08-14T14:40:31.217 に答える
1

ローカル コンピュータ (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 の詳細

于 2015-10-08T07:04:58.477 に答える
1

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

}
于 2008-09-16T11:21:34.953 に答える