boost create_directories () не работает на ограниченном удаленном сервере

У меня проблема с созданием каталогов в общей папке на удаленном компьютере с помощью boost create_directories (). У меня есть доступ только для чтения на этой акции. Но я создаю соединение с учетными данными пользователя с полным доступом для чтения и записи.

Соединение включено с WNetAddConnection2. Затем приложение должно создать каталоги «\ 139.22.XXX.XXX \ temp \ Test \ 1», и соединение отключается с помощью WNetCancelConnection2.

Код показан ниже:

using namespace boost::filesystem;

typedef boost::filesystem::path Path;
typedef boost::filesystem::basic_filesystem_error<boost::filesystem::path> boost_filesystem_error;DWORD loginDicomImporter()
{
DWORD dwRetVal;
NETRESOURCE nr;
DWORD dwFlags;

LPTSTR remoteName = _T("\\\\139.22.XXX.XXX\\temp");

nr.dwType = RESOURCETYPE_ANY;
nr.lpLocalName = NULL;
nr.lpRemoteName = remoteName;
nr.lpProvider = NULL;

dwFlags = CONNECT_TEMPORARY;

dwRetVal = WNetAddConnection2(&nr, _T("xxxPWDxxx"), _T("xxxUSERxxx"), dwFlags);

if (dwRetVal == NO_ERROR)
{

return dwRetVal;
}
else
{

return dwRetVal;
}

}

DWORD logoutDicomImporter()
{

DWORD dwResult;
LPCTSTR lpName = _T("\\\\139.22.XXX.XXX\\temp");
dwResult = WNetCancelConnection2(lpName, CONNECT_UPDATE_PROFILE, FALSE);

if (dwResult == NO_ERROR)
{

return dwResult;
}
else if (dwResult == ERROR_NOT_CONNECTED)
{

return dwResult;
}
else
{

return dwResult;
}

}

int main()
{
DWORD loginResult;
std::string directoryPath = "\\\\139.22.XXX.XXX\\temp\\Test\\1";

loginResult = loginDicomImporter();

std::cout << loginResult << std::endl;

try
{
boost::filesystem::create_directories(directoryPath);
}
catch (boost_filesystem_error &e)
{
auto msg = e.what();
return 1;
}loginResult = logoutDicomImporter();
std::cout << loginResult << std::endl;
}

Пойманное исключение говорит: «boost :: filesystem :: create_directory: доступ запрещен:» \ 139.22.XXX.XXX \ temp \ Test \ 1 «Очевидно, ОС отказывает в доступе. Хотя я включил соединение с полным доступом до создания каталогов.

Любые предложения, как решить эту проблему?

3

Решение

Спасибо тебе melak47 за твой быстрый ответ.
Но проблема была в том, что в моем реальном коде я использовал псевдоним servername для directoryPath-string.

Раньше у меня было так:
std::string directoryPath = "\\\\ServerName\\temp\\Test\\1"; Следуя вашему совету, я заменил его на ip-адрес.

Теперь создание каталогов работает, как показано выше.

0

Другие решения


По вопросам рекламы [email protected]