答案 0 :(得分:0)
听起来你正在为范围指定RESOURCE_GLOBALNET
,但如果没有看到你的代码就很难分辨出错误。
如果不知道你尝试了什么以及你得到了什么,很难提供帮助。例如,您期望的是什么本地名称以及返回的内容?您是否使用SHARE_INFO_503尝试NetShareEnum?
答案 1 :(得分:0)
在此链接中,您可以找到一个示例 http://msdn.microsoft.com/en-us/library/aa385334(v=VS.85).aspx
答案 2 :(得分:0)
如果你知道本地路径是什么,你可以通过测试来强制它:( TODO:make everything Unicode)
// Helper function to make a name unique.
std::string computername()
{
static std::string name = []() {
WCHAR buf[MAX_COMPUTERNAME_LENGTH];
DWORD len = MAX_COMPUTERNAME_LENGTH;
GetComputerNameEx(ComputerNameNetBIOS, buf, &len);
return std::string(buf, buf + len);
}();
return name;
}
int main()
{
std::string dir = "C:\\FindThisShare\\";
// First, create marker
std::string testfile = computername() + " 038D2B86-7459-417B-9179-90CEECC6EC9D.txt";
std::ofstream test(dir + testfile);
test << "This directory holds files from " << computername()
<< std::endl;
test.close();
// Next, find the UNC path holding it.
BYTE* buf;
DWORD numEntries;
NetShareEnum(nullptr, 1, &buf, MAX_PREFERRED_LENGTH, &numEntries,
&numEntries, nullptr);
auto data = reinterpret_cast<SHARE_INFO_1*>(buf);
std::string retval;
for (int i = 0; i != numEntries; ++i)
{
auto const& entry = data[i];
std::wstring tmp(entry.shi1_netname);
std::string share(tmp.begin(), tmp.end());
std::string uncdir = "\\\\" + computername() + "\\" + share + "\\";
if (PathFileExistsA((uncdir + testfile).c_str()))
{
printf("Exists");
}
}
remove((dir + testfile).c_str());
NetApiBufferFree(buf);
}