プロジェクトを 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
メソッド宣言はPInvoke.netで見つかりました
あなたのVB6はFileSystemObject
COM経由でWindowsを使用しています。
.Net には短いファイル名を取得する機能がないようです。他の回答のように P/Invoke を使用して Windows API を呼び出すのではなく、VB.Net で COM を介して同じ FileSystemObject を使用する方が簡単です。「Microsoft Scripting Runtime」への COM 参照を追加するだけです。そうすれば、VB6 コードはおそらく VB.Net でもほとんど変更されずに機能します。