VB版
Declare Function GetLongPathName Lib "kernel32" Alias "GetLongPathNameA" (ByVal lpszShortPath As String, ByVal lpszLongPath As String, ByVal cchBuffer As Long) As Long
說明
獲取指定檔案的長路徑名
返回值
Long,裝載到lpszShortPath緩衝區的字元數量。如lpszLongPath的長度不足,不能容下檔案名稱,就返回需要的緩衝區長度
參數表
參數 類型及說明
lpszShortPath String,指定欲獲取長路徑名的那個檔案的名字。
lpszLongPath String,指定一個緩衝區,用於裝載檔案的長路徑和檔案名稱
cchBuffer Long,lpszLongPath緩衝區長度
Delphi版
Function GetLongPathName(lpszShortPath:PChar,lpszLongPath:PChar,cchBuffer:Cardinal):Cardinal
lpszShortPath 短檔案名稱,原來的字元串
lpszLongPath長檔案名稱,我們想要的結果
cchBuffer 緩衝區長度
舉個例子:
S := ParamStr(1);
GetLongPathName(PChar(S),PChar(S),Length(S));
將程式啟動時得到的S值(一個長檔案名稱),變為一個短檔案名稱,並且還是將S的值改變為該短檔案名稱。
但是,在實際使用中,字元串的最後幾位會返回一些奇怪的字元,例如 #0'EX' 等等,我用的方法是:
for I := Length(S) downto Length(S)-2 do
Runaim := #32;
#32在Delphi中為空格。具體可以參見常用字元與ASCII代碼對照表。
C++版
DWORD WINAPI GetLongPathName(
LPCTSTR lpszShortPath,//指定的要轉換的路徑
LPTSTR lpszLongPath,//接收長路徑的緩衝區
DWORD cchBuffer//緩衝區長度
);
函式說明:
將指定的路徑轉化成長路徑形式
返回值:
函式執行成功則返回lpszLongPath接收的字元串長度,不包括空字元;如果lpszLongPath長度太小,則函式返回接收長路徑需要的緩衝區長度,包括空字元,因此如果返回值大於cchBuffer,則應重新分配lpszLongPath,使其長度足夠容納長路徑;如果函式因為其他原因失敗則返回0,可以通過GetLastError()獲取錯誤信息