3

プロジェクトを 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はFileSystemObjectCOM経由でWindowsを使用しています。

.Net には短いファイル名を取得する機能がないようです。他の回答のように P/Invoke を使用して Windows API を呼び出すのではなく、VB.Net で COM を介して同じ FileSystemObject を使用する方が簡単です。「Microsoft Scripting Runtime」への COM 参照を追加するだけです。そうすれば、VB6 コードはおそらく VB.Net でもほとんど変更されずに機能します。

于 2012-10-04T13:44:33.510 に答える