3

ho 我正在将我的项目从 vb6 转换为 vb.net 在短路径的 vb.net 中有模拟方法吗?

Dim DestinationFile As Scripting.File
...
DestinationFile.ShortPath

谢谢

4

3 回答 3

5

不,现代语言不是为使用短路径而构建的,但您可以使用内核中的 GetShortPathName 方法:

Declare Auto Function GetShortPathName Lib "kernel32.dll" _
(ByVal lpszLongPath As String, ByVal lpszShortPath As StringBuilder, _
ByVal cchBuffer As Integer) As Integer

调用使用:

Dim name As String = "C:\Long Directory Name\Really really long filename.txt"

Dim sb As New StringBuilder(256)
GetShortPathName(name, sb, sb.capacity)

Dim shortName As String = sb.ToString()
于 2012-10-04T13:09:45.027 回答
2

到目前为止我能找到的是没有托管代码,但你可以这样做:

Imports System.Text
Imports System.Runtime.InteropServices

Module Module1

    Declare Unicode Function GetShortPathName Lib "kernel32.dll" Alias "GetShortPathNameW" (ByVal longPath As String, <MarshalAs(UnmanagedType.LPTStr)> ByVal ShortPath As System.Text.StringBuilder, <MarshalAs(UnmanagedType.U4)> ByVal bufferSize As Integer) As Integer

    Sub Main()
        Dim filespec As String = "SomeLongName"

        Dim sbShortPath As StringBuilder = New StringBuilder()
        GetShortPathName(filespec, sbShortPath, 255)

        Dim shortPath As String = sbShortPath.ToString
    End Sub

End Module

PInvoke.net上找到方法声明

于 2012-10-04T13:09:44.613 回答
0

您的 VB6 正在FileSystemObject通过 COM 使用 Windows。

.Net 中似乎没有获取短文件名的功能。与在其他答案中使用 P/Invoke 调用 Windows API 不同,在 VB.Net 中通过 COM 使用相同的 FileSystemObject 更简单。只需添加对“Microsoft Scripting Runtime”的 COM 引用。那么 VB6 代码在 VB.Net 中可能几乎没有变化。

于 2012-10-04T13:44:33.510 回答