Hola seba123neo,
Muy bueno el aporte, muchas muchas gracias... el método funciona bien.
Pero en estos días estuve buscando por mi cuenta y encontré lo que estaba buscando, hacer este trabajo con APIs... y finalmente, luego de varias horas de investigación... decidí seguir usando el método open, para crear un archivo temporal y trabajar sobre él... y luego al final... sí... renombrarlo con un nombre UNICODE... solamente usé una API... la siguiente:
Private Declare Function MoveFileW Lib "kernel32.dll" (ByVal lpExistingFileName As Long, ByVal lpNewFileName As Long) As LongPero en realidad, como estoy obteniendo el nombre del archivo desde un archivo HTML... descargado en YouTube... usé algunas cosas más...
El nombre del archivo, es el título de cualquier video de YouTube... y ESO viene en UTF8... por lo que necesité también una función para pasar de UTF8 a UNICODE... todo lo que usé es esto...
'mover archivos y detectar unicode en windows
Private Declare Function GetDesktopWindow Lib "user32.dll" () As Long
Private Declare Function IsWindowUnicode Lib "user32.dll" (ByVal hWnd As Long) As Long
Private Declare Function MoveFileA Lib "kernel32.dll" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String) As Long
Private Declare Function MoveFileW Lib "kernel32.dll" (ByVal lpExistingFileName As Long, ByVal lpNewFileName As Long) As Long
'convertir utf8
Private Const CP_UTF8 = 65001
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
'mover archivo
Public Function Mover(ByVal ExistingFileName As String, ByVal NewFileName As String) As Long
If Not (IsWindowUnicode(GetDesktopWindow) = 0&) Then
Mover = MoveFileW(StrPtr(ExistingFileName), StrPtr(NewFileName))
Else
Mover = MoveFileA(ExistingFileName, NewFileName)
End If
End Function
'convertir utf8 a unicode
Public Function UTF8_Decode(ByVal sUTF8 As String) As String
Dim lngUtf8Size As Long
Dim strBuffer As String
Dim lngBufferSize As Long
Dim lngResult As Long
Dim bytUtf8() As Byte
Dim n As Long
If LenB(sUTF8) Then
On Error GoTo EndFunction
bytUtf8 = StrConv(sUTF8, vbFromUnicode)
lngUtf8Size = UBound(bytUtf8) + 1
On Error GoTo 0
'Set buffer for longest possible string i.e. each byte is
'ANSI<=&HFF, thus 1 unicode(2 bytes)for every utf-8 character.
lngBufferSize = lngUtf8Size * 2
strBuffer = String$(lngBufferSize, vbNullChar)
'Translate using code page 65001(UTF-8)
lngResult = MultiByteToWideChar(CP_UTF8, 0, bytUtf8(0), lngUtf8Size, StrPtr(strBuffer), lngBufferSize)
'Trim result to actual length
If lngResult Then
UTF8_Decode = Left$(strBuffer, lngResult)
End If
End If
EndFunction:
End Function
MUCHAS GRACIAS Y ESPERO QUE ESTOS EJEMPLOS, LOS TUYOS Y LOS MIOS, LE SIRVAN A ALGUIEN... SEGURAMENTE
;-)UN SALUDOOOO!!!!