ho 我正在将我的项目从 vb6 转换为 vb.net 在短路径的 vb.net 中有模拟方法吗?
Dim DestinationFile As Scripting.File
...
DestinationFile.ShortPath
谢谢
不,现代语言不是为使用短路径而构建的,但您可以使用内核中的 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()
到目前为止我能找到的是没有托管代码,但你可以这样做:
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
您的 VB6 正在FileSystemObject
通过 COM 使用 Windows。
.Net 中似乎没有获取短文件名的功能。与在其他答案中使用 P/Invoke 调用 Windows API 不同,在 VB.Net 中通过 COM 使用相同的 FileSystemObject 更简单。只需添加对“Microsoft Scripting Runtime”的 COM 引用。那么 VB6 代码在 VB.Net 中可能几乎没有变化。