VB使用API時被忽視的字符串數返回問題

  勇芳 2017-2-17 5234

用例題說明

Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
Public Function 短文件名(LongPath As String) As String
    Dim ShortPath As String
    Const MAX_PATH = 260
    Dim ret&
    ShortPath = Space$(MAX_PATH)
    ret& = GetShortPathName(LongPath, ShortPath, MAX_PATH)
    If ret& Then
        短文件名 = Left$(ShortPath, ret&)
    End If
End Function

這是我多年前網上找的,一直在用,不管如何看代碼,沒任何問題,但實際上有問題。

當遇到有中文時,GetShortPathName 返回的字符數量就不對了。

因為中文為2個,而VB處理當成1個,就有問題了。

所以,我們必須這樣做避免出問題

    If ret& Then
        ret& = InStr(ShortPath, Chr(0)) - 1
        短文件名 = Left$(ShortPath, ret&)
    End If

API有很多類似這個,返回字符串數的,都要注意,不然BUG更本找不到。


以上是將長文件名(帶路徑)轉換為短文件名。

因國家互聯網安全管理要求,關閉回帖功能。大家需要留言,請使用【勇芳軟件客服】即時聯系勇芳點此打開->>勇芳軟件客服
返回
聯系勇芳
一个人看的www视频播放中文_2012中文字幕电影_亚洲国产成人高清在线观看_中文字幕天堂最新版在线网