c++映射网络驱动器
c++映射网络驱动器
mount
bool sys::mount2(const std::string& szSource, const std::string& szTarget, const std::string& szUser, const std::string& szPwd, std::string& err)
{
bool res = false;
do
{
#ifdef WIN32
#ifdef UNICODE
std::wstring source = mm::Charset::ANSIToUnicode(szSource.c_str());
std::wstring target = mm::Charset::ANSIToUnicode(szTarget.c_str());
std::wstring name = mm::Charset::ANSIToUnicode(szUser.c_str());
std::wstring pwd = mm::Charset::ANSIToUnicode(szPwd.c_str());
if ('\\'==source[source.length()-1])
{
source[source.length()-1] = 0;
}
#else
std::string source=szSource;
std::string target=szTarget;
std::wstring name= szUser;
std::string pwd=szPwd;
#endif
DWORD dwRetVal;
NETRESOURCE nr;
DWORD dwFlags;
memset(&nr, 0, sizeof(NETRESOURCE));
nr.dwType = RESOURCETYPE_ANY;
nr.lpLocalName = (LPTSTR)(LPCTSTR)target.c_str();
nr.lpRemoteName = (LPTSTR)(LPCTSTR)source.c_str();
nr.lpProvider = NULL;
dwFlags = CONNECT_UPDATE_PROFILE;
dwRetVal = ::WNetAddConnection2(&nr, pwd.c_str(), name.c_str(), dwFlags);
if (dwRetVal != NO_ERROR)
{
LOG_ERROR("WNetAddConnection2 dwRetVal=%ld", dwRetVal);
break;
}
#endif
res = true;
} while (0);
return res;
}
umount
bool sys::umount2(const std::string& szTarget, std::string& err)
{
bool res = false;
do
{
#ifdef WIN32
#ifdef UNICODE
std::wstring path = mm::Charset::ANSIToUnicode(szTarget.c_str());
#else
std::string path = mm::Charset::ANSIToUnicode(szTarget);
#endif //
if (::PathFileExists(path.c_str()))
{
DWORD dwRetVal = ::WNetCancelConnection2(path.c_str(), 1, true);
if (NO_ERROR != dwRetVal)
{
LOG_ERROR("WNetCancelConnection2 dwRetVal=%ld", dwRetVal);
break;
}
}
#endif //
res = true;
} while (0);
return res;
}
参考: