Expand пути и имени файла - как?

Программирование на Visual Basic for Applications
Sl@v
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 19.12.2007 (Ср) 11:51

Expand пути и имени файла - как?

Сообщение Sl@v » 19.12.2007 (Ср) 12:12

Добрый день.
Потерял уже очень много времени на элементарный вопрос: как в VBA из короткой формы полного пути файла получить расширенную. Т.е., например, из
C:\DOCUME~1\abc.txt
получить:
C:\Documents and Settings\abc.txt

Вот эти функции API элементарно не работают:
Код: Выделить всё
Declare Function GetFullPathName Lib "kernel32" Alias "GetFullPathNameA" ( _
ByVal lpFileName As String, _
ByVal nBufferLength As Long, _
ByVal lpBuffer As String, _
ByVal lpFilePart As String _
) As Long

Declare Function GetLongPathName Lib "kernel32.dll" Alias "GetLongPathNameA" _
(ByVal lpszShortPath As String, ByVal lpszLongPath As String, ByVal cchBuffer As Long) As Long

Чего только не перепробывал. Главное, код возврата вроде правильный - не 0. Но вот преобразованный путь в буфер не пишется.

Код: Выделить всё
    MyTempDir = String(128, Chr$(0))
    ss1 = Environ$("TEMP")
    MsgBox ss1
   
    ii_call = GetLongPathName(ss1, MyTempDir, Len(MyTempDir))
    MsgBox ii_call
    MsgBox MyTempDir

В первом сообщение - правильная короткая форма, во втором - число больше 0, а в третьем - вообще ничего.

Win 2000
Excel 2002
VBA 6.3


Спасибо.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.12.2007 (Ср) 12:48

А почему у тебя lpBuffer как ByVal?
И вообще, почему бы Unicode-версию не использовать?

Код: Выделить всё
Declare Function GetLongPathName Lib "kernel32" Alias "GetLongPathNameW" (
ByVal lpszShortPath As Long,
ByVal lpszLongPath As Long,
ByVal cchBuffer As Long,
) As Long
...

FileSpec As String
...
Dim ret As Long, LongName As String, FilePath As String, FileName As String
LongName = String$(1024, 0)
ret = GetLongPathName(StrPtr(FileSpec), StrPtr(LongName), Len(LongName))
LongName = Left$(LongName, ret)
MsgBox LongName

Как-то так.
Lasciate ogni speranza, voi ch'entrate.

Sl@v
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 19.12.2007 (Ср) 11:51

Сообщение Sl@v » 19.12.2007 (Ср) 13:14

alibek,

спасибо! Вопрос решен.

PS Тока в объявлении функции последняя запятая лишняя. :)


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 108

    TopList  
cron