Crear nombre de archivo, en cualquier idioma (ejemplo: ruso)

Iniciado por ProgramadorVB, 20 Mayo 2010, 21:58 PM

0 Miembros y 1 Visitante están viendo este tema.

ProgramadorVB

Hola amigos, muy buenos días.

Porque es posible que algunos de ustedes ya lo hallan visto... abro este post, para ver si me puede ayudar.

Necesito crear (con vb6) archivos en cualquier idioma...
Por ejemplo, los siguientes los creé a mano...



Necesito usar por ejemplo OPEN para crear archivos...
¿Cómo hacer esto? ¿Que API usar?


Espero que me puedan ayudar y seguramente también servirá para otro...

Un saludo y gracias de antemano.

TheGhost(Z)

¿como lo has hecho a mano?. no puedes implementarlo desde vb siguiendo ese mismo procedimiento?

ProgramadorVB

Hola TheGhost(Z) y gracias por el mensaje...


Te respondo; probé con métodos fáciles de deducir, incluido el que mencionas... y no pude crear nombres de archivos como los que necesito... imaginate... si fuese así se sencillo, no estaría pidiendo ayuda a otra persona... me entiendes?

Por otro lado, necesito crear archivos usando vb6... por lo que seguramente necesito usar alguna API, para crear archivos de estas características, con nombre como esos... pero aún no se bien como hacerlo...

Espero alguna persona que sepa más que yo (que seguro que los hay) me pueda ayudar...

Un saludo y gracias

seba123neo

Hola, busca una tabla de caracteres UNICODE y listo, aca te pongo un ejemplo con caracteres arabes.

Código (vb) [Seleccionar]
Option Explicit

Private Sub Form_Load()

    Dim oFSO As Object
    Dim oTextStream As Object

    Dim vNombreArchivo As String
    Dim vCaracterUnicode As String
   
    vCaracterUnicode = ChrW(&H633) & ChrW(&H634) & ChrW(&H635) & ChrW(&H636) & ChrW(&H637) ' Aca te pongo unos caracteres arabes..
   
    vNombreArchivo = "C:\" & vCaracterUnicode & ".txt"
   
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oTextStream = oFSO.CreateTextFile(vNombreArchivo, True, True)
   
    oTextStream.Write "Holaaa"
    oTextStream.Close
   
    Set oFSO = Nothing
   
End Sub


yo cree el archivo con FSO, vos crealo con el Open normal si queres...

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

ProgramadorVB

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 Long


Pero 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...

Código (vb) [Seleccionar]
'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!!!!