【问题标题】:How can I have the Physical path by giving the network path如何通过提供网络路径来获得物理路径
【发布时间】:2010-11-29 21:18:32
【问题描述】:

现在我有一个问题是使用“路径的”物理和网络。
我在服务器机器上有一个 SQL 服务器,我有一个用作客户端的台式机。
我正在从我的客户端计算机上运行一个存储过程,以便添加一个流式数据库。
但在我运行这个程序之前,我运行另一个准备所需“路径”的程序,这个程序需要:

myPath="\\Server\SharedFolder\SQL\

为了运行第一个程序,我必须在每个物理名称中打开 myPath:

myPath="DriveLetter:\Public\WorkFiles\SQL\"

现在我的问题是我将如何拥有物理路径,即在服务器上构建它并且很难(到不可能)知道它?
基本上我需要一个函数来返回我不知道的物理路径。我的开发环境是vb.net 2010
有没有人可以帮助我解决这个问题?

【问题讨论】:

    标签: windows vb.net visual-studio-2010


    【解决方案1】:

    您可以为此使用NetShareEnum Windows API,将服务器名称作为第一个参数传递,级别为 2 或 502。然后您可以根据返回的路径进行匹配。

    当然,您需要特殊的组成员身份才能成功调用此类(管理员、高级用户、打印操作员或服务器操作员)。

    【讨论】:

    • 好吧,亲爱的西蒙,我当然会非常感谢你的回答,我承认我花了很多时间处理你的提议,但我还没有得出结论。我使用 Public Declare Function NetShareGetInfo Lib "Netapi32.dll" (ByVal strServerName As Object, ByVal strNetName As Object, ByVal nLevel As Long, ByVal pBuffer As Long) As Long 。但我出现以下错误:
    • Continuing:= PInvokeStackImbalance 检测到消息:对 PInvoke 函数“AssetsManagement!AssetsManagement.Common_Proc::NetShareGetInfo”的调用使堆栈不平衡。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配。我使用的是vb.net开发环境,请问有什么可行的解决方案吗?
    • 您好,我不熟悉VB.NET语法,但是这里的p/invoke声明看起来不太好,看看这个链接:pinvoke.net/default.aspx/netapi32.netsharegetinfo
    • 亲爱的西蒙,你是唯一最好的,非常感谢。所有问题都按我的预期工作。确实,代码庞大而艰巨。再次感谢您。
    【解决方案2】:

    类似的东西

        Dim foo As String = "\\DLINK_NAS\Volume_1"
        Dim dirInfo As New IO.DirectoryInfo(foo)
    
        For Each drv As IO.DriveInfo In My.Computer.FileSystem.Drives
            If drv.IsReady AndAlso dirInfo.Name = drv.VolumeLabel Then
                'match here
            End If
        Next
    

    【讨论】:

    • 亲爱的 dbasnett,非常感谢您的回答,但这不是我想要的。因为您看到我想要网络驱动器“\\ServerName\SharedName\instalation_path”的物理尺寸,所以您看到我拥有的唯一项目是服务器的名称和共享路径,并且使用这两个参数我已经完成了所有我的工作。
    猜你喜欢
    • 2016-03-25
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多