2008-08-14 18 views
7

Trong một ứng dụng C++ Windows (XP và NT, nếu nó tạo ra sự khác biệt), tôi cần lấy tên mạng được kết hợp với máy tính mà mã đang thực thi, để tôi có thể chuyển đổi tên tập tin cục bộ từ C : \ filename.ext vào \\ network_name \ C $ \ filename.ext. Làm thế nào tôi sẽ làm điều này?Trong C++/Windows, làm cách nào để nhận tên mạng của máy tính tôi đang sử dụng?

Hoặc, nếu có một chức năng sẽ chỉ thực hiện chuyển đổi mà tôi mô tả, điều đó sẽ còn tốt hơn nữa. Tôi nhìn vào WNetGetUniversalName, nhưng điều đó dường như không hoạt động với các tệp cục bộ (ổ C).

+0

1 cho bạn. Lần đầu tiên kết quả của tôi trên google là một bài đăng Stack Overflow. Cảm ơn tất cả. – theschmitzer

Trả lời

9

Có nhiều hơn một lựa chọn thay thế:

a. Sử dụng GetComputerName của Win32() theo gợi ý của Stu.
Ví dụ: http://www.techbytes.ca/techbyte97.html
HOẶC
b. Sử dụng hàm gethostname() trong Winsock. Chức năng này là nền tảng chéo và có thể giúp đỡ nếu ứng dụng của bạn sẽ được chạy trên các nền tảng khác ngoài Windows.
Tham khảo MSDN: http://msdn.microsoft.com/en-us/library/ms738527(VS.85).aspx
HOẶC
c. Sử dụng hàm getaddrinfo().
Tham khảo MSDN: http://msdn.microsoft.com/en-us/library/ms738520(VS.85).aspx

+0

Thật không may, liên kết cho a) (techbytes.ca) dường như không còn khả dụng nữa. – lowglider

1

Tôi đồng ý với Pascal về việc sử dụng chức năng gethostname() của winsock. Ở đây bạn đi:

#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

Nếu bạn muốn chỉ có tên của máy tính cục bộ (NetBIOS) sử dụng GetComputerName chức năng. Nó chỉ tìm lại tên máy tính cục bộ được thiết lập khi khởi động hệ thống, khi hệ thống đọc nó từ sổ đăng ký.

BOOL WINAPI GetComputerName(
    _Out_ LPTSTR lpBuffer, 
_Inout_ LPDWORD lpnSize 
); 

Thông tin thêm về GetComputerName

Nếu bạn muốn nhận được tên máy chủ DNS, tên miền DNS, hoặc tên DNS đầy đủ gọi GetComputerNameEx chức năng.

BOOL WINAPI GetComputerNameEx(
    _In_ COMPUTER_NAME_FORMAT NameType, 
    _Out_ LPTSTR    lpBuffer, 
    _Inout_ LPDWORD    lpnSize 
); 

Thông tin thêm về GetComputerNameEx

Các vấn đề liên quan