Метод WinAPI::createDirectoryPath не работает с сетевыми папками. Собственно ошибка:
Цитата:
Ошибка вызова статического метода ClrObject.
System.Reflection.TargetInvocationException: Адресат вызова создал исключение. ---> System.ArgumentException: Путь UNC должен иметь вид \\server\share.
в System.IO.Path.NormalizePathFast(String path, Boolean fullCheck)
в System.IO.Path.NormalizePath(String path, Boolean fullCheck)
в System.IO.Path.GetFullPathInternal(String path)
в System.IO.Directory.CreateDirectory(String path, DirectorySecurity directorySecurity)
в System.IO.Directory.CreateDirectory(String path)
--- Конец трассировки внутреннего стека исключений ---
в System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
в System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
в ClrBridgeImpl.InvokeClrStaticMethod(ClrBridgeImpl* , Char* pszClassName, Char* pszMethodName, Char* assemblyName, Int32 argsLength, ObjectWrapper** arguments, Boolean* argsAreByRef, Boolean* isException)
Видимо разработчики просто
забили забыли про этот случай. Лечится просто:
X++:
// Verifyes or creates Path
//
static client public boolean createDirectoryPath(FilePath _path)
{
int ptr;
;
_path = strLRTrim(_path);
if (substr(_path,strlen(_path),1) != '\\') // Adding backslash gives a more simple while-loop!
{
_path += '\\';
}
ptr = strfind(_path, '\\', 1, strlen(_path));
// fix case '\\server\share'
// -->>
if (_path like '\\\\\\\\*')
{
ptr = strfind(_path, '\\', 3, strlen(_path));
ptr = strfind(_path, '\\', ptr + 1, strlen(_path));
}
// <<--
while (ptr)
{
WinAPI::createDirectory(substr(_path, 1, ptr));
if (!WinAPI::folderExists(substr(_path, 1, ptr)))
{
break;
}
ptr = strfind(_path, '\\', ptr + 1, strlen(_path));
}
return WinAPI::folderExists(_path);
}
Суть в том чтобы при разборе вложенных катологов пропустить первую часть пути, содержащую имя сервера и сетевого ресурса