2014-01-09 5 views
0

Я использую следующий код, чтобы установить соединение с сетевым путем, чтобы получить список файлов.VB.NET - WNetAddConnection2 - «Сетевой путь не найден».

Сетевой путь вызывающе правдоподобен, и для меня можно вручную сопоставить диск с теми же учетными данными. Просто при запуске этого кода отображается ошибка: «53», что означает «сетевой путь не найден».

Ошибка возникает внезапно, что говорит мне о том, что даже соединение не производится.

Dim nr As New NETRESOURCE 
    nr.dwType = RESOURCETYPE_DISK 
    nr.lpRemoteName = "\\fileserver.ourserver.com\" 
    MessageBox.Show(WNetAddConnection2(nr, "Password", "ourserver.com\User", 0)) 

Другой код:

Imports System.Runtime.InteropServices 
Imports System 
Imports System.IO 


Public Class Form1 


    <StructLayout(LayoutKind.Sequential)> _ 
    Private Structure NETRESOURCE 
     Public dwScope As UInteger 
     Public dwType As UInteger 
     Public dwDisplayType As UInteger 
     Public dwUsage As UInteger 
     <MarshalAs(UnmanagedType.LPTStr)> _ 
     Public lpLocalName As String 
     <MarshalAs(UnmanagedType.LPTStr)> _ 
     Public lpRemoteName As String 
     <MarshalAs(UnmanagedType.LPTStr)> _ 
     Public lpComment As String 
     <MarshalAs(UnmanagedType.LPTStr)> _ 
     Public lpProvider As String 
    End Structure 

    Private Const NO_ERROR As Long = 0 
    Private Const RESOURCETYPE_DISK As UInteger = 1 

    <DllImport("mpr.dll", CharSet:=CharSet.Auto)> _ 
    Private Shared Function WNetAddConnection2(ByRef lpNetResource As NETRESOURCE, <[In](), MarshalAs(UnmanagedType.LPTStr)> ByVal lpPassword As String, <[In](), MarshalAs(UnmanagedType.LPTStr)> ByVal lpUserName As String, ByVal dwFlags As UInteger) As UInteger 
    End Function 

    <DllImport("mpr.dll", CharSet:=CharSet.Auto)> _ 
    Private Shared Function WNetCancelConnection2(<[In](), MarshalAs(UnmanagedType.LPTStr)> ByVal lpName As String, ByVal dwFlags As UInteger, <MarshalAs(UnmanagedType.Bool)> ByVal fForce As Boolean) As UInteger 
    End Function 



End Class 
+0

Для атрибута StructLayout требуется CharSet: = CharSet.Auto, чтобы он соответствовал объявлению функции. –

ответ

0

Не знаете почему, но добавление/IPC $ на путь к серверу теперь позволяет мне использовать его снова.

0

Есть ли причина, вы используете класс Interop в список файлов, вы можете использовать .NET Framework для DiriectoryInfo класса делать то же самое.

+0

Старый код, раньше использовал разные методы, но теперь с помощью DirectoryInfo. – MRC

Смежные вопросы