30.03.2016, 11:37 | #1 |
Участник
|
Метод WinAPI::createDirectoryPath не работает с сетевыми папками
Метод 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); } Суть в том чтобы при разборе вложенных катологов пропустить первую часть пути, содержащую имя сервера и сетевого ресурса Последний раз редактировалось S.Kuskov; 30.03.2016 в 11:42. |
|
|
За это сообщение автора поблагодарили: Pustik (2), Logger (2), gl00mie (2). |