45 lines
1.1 KiB
C++
45 lines
1.1 KiB
C++
|
|
|
|
#include "util.h"
|
|
#include "tfilepath.h"
|
|
#include "texception.h"
|
|
|
|
#ifdef WIN32
|
|
#include <windows.h>
|
|
#endif
|
|
|
|
string convertToUncString(const TFilePath &fp) {
|
|
#ifdef WIN32
|
|
|
|
DWORD cbBuff = 1024; // Size of Buffer
|
|
char szBuff[1024]; // Buffer to receive information
|
|
REMOTE_NAME_INFO *prni = (REMOTE_NAME_INFO *)&szBuff;
|
|
|
|
// Pointers to head of buffer
|
|
UNIVERSAL_NAME_INFO *puni = (UNIVERSAL_NAME_INFO *)&szBuff;
|
|
|
|
DWORD dwResult =
|
|
WNetGetUniversalName(toString(fp.getWideString()).c_str(),
|
|
UNIVERSAL_NAME_INFO_LEVEL, (LPVOID)&szBuff, &cbBuff);
|
|
|
|
switch (dwResult) {
|
|
case NO_ERROR:
|
|
return puni->lpUniversalName;
|
|
|
|
case ERROR_NOT_CONNECTED:
|
|
// The network connection does not exists.
|
|
throw TException("The path specified doesn't refer to a shared folder");
|
|
|
|
case ERROR_CONNECTION_UNAVAIL:
|
|
// The device is not currently connected,
|
|
// but it is a persistent connection.
|
|
throw TException("The shared folder is not currently connected");
|
|
|
|
default:
|
|
throw TException("Cannot convert the path specified to UNC");
|
|
}
|
|
|
|
#else
|
|
return fp.getFullPath().c_str();
|
|
#endif
|
|
}
|