elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Crear nombre de archivo, en cualquier idioma (ejemplo: ruso)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Crear nombre de archivo, en cualquier idioma (ejemplo: ruso)  (Leído 2,853 veces)
ProgramadorVB

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Crear nombre de archivo, en cualquier idioma (ejemplo: ruso)
« en: 20 Mayo 2010, 21:58 pm »

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.


En línea

TheGhost(Z)

Desconectado Desconectado

Mensajes: 230



Ver Perfil
Re: Crear nombre de archivo, en cualquier idioma (ejemplo: ruso)
« Respuesta #1 en: 22 Mayo 2010, 13:40 pm »

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


En línea

ProgramadorVB

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Re: Crear nombre de archivo, en cualquier idioma (ejemplo: ruso)
« Respuesta #2 en: 22 Mayo 2010, 17:06 pm »

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
En línea

seba123neo
Moderador
***
Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Crear nombre de archivo, en cualquier idioma (ejemplo: ruso)
« Respuesta #3 en: 24 Mayo 2010, 03:32 am »

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

Código
  1. Option Explicit
  2.  
  3. Private Sub Form_Load()
  4.  
  5.    Dim oFSO As Object
  6.    Dim oTextStream As Object
  7.  
  8.    Dim vNombreArchivo As String
  9.    Dim vCaracterUnicode As String
  10.  
  11.    vCaracterUnicode = ChrW(&H633) & ChrW(&H634) & ChrW(&H635) & ChrW(&H636) & ChrW(&H637) ' Aca te pongo unos caracteres arabes..
  12.  
  13.    vNombreArchivo = "C:\" & vCaracterUnicode & ".txt"
  14.  
  15.    Set oFSO = CreateObject("Scripting.FileSystemObject")
  16.    Set oTextStream = oFSO.CreateTextFile(vNombreArchivo, True, True)
  17.  
  18.    oTextStream.Write "Holaaa"
  19.    oTextStream.Close
  20.  
  21.    Set oFSO = Nothing
  22.  
  23. End Sub

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

saludos.
En línea

ProgramadorVB

Desconectado Desconectado

Mensajes: 29


Ver Perfil
Re: Crear nombre de archivo, en cualquier idioma (ejemplo: ruso)
« Respuesta #4 en: 24 Mayo 2010, 21:23 pm »

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
  1. 'mover archivos y detectar unicode en windows
  2. Private Declare Function GetDesktopWindow Lib "user32.dll" () As Long
  3. Private Declare Function IsWindowUnicode Lib "user32.dll" (ByVal hWnd As Long) As Long
  4. Private Declare Function MoveFileA Lib "kernel32.dll" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String) As Long
  5. Private Declare Function MoveFileW Lib "kernel32.dll" (ByVal lpExistingFileName As Long, ByVal lpNewFileName As Long) As Long
  6.  
  7. 'convertir utf8
  8. Private Const CP_UTF8 = 65001
  9. 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
  10.  
  11. 'mover archivo
  12. Public Function Mover(ByVal ExistingFileName As String, ByVal NewFileName As String) As Long
  13.    If Not (IsWindowUnicode(GetDesktopWindow) = 0&) Then
  14.        Mover = MoveFileW(StrPtr(ExistingFileName), StrPtr(NewFileName))
  15.    Else
  16.        Mover = MoveFileA(ExistingFileName, NewFileName)
  17.    End If
  18. End Function
  19.  
  20. 'convertir utf8 a unicode
  21. Public Function UTF8_Decode(ByVal sUTF8 As String) As String
  22.  
  23.    Dim lngUtf8Size      As Long
  24.    Dim strBuffer        As String
  25.    Dim lngBufferSize    As Long
  26.    Dim lngResult        As Long
  27.    Dim bytUtf8()        As Byte
  28.    Dim n                As Long
  29.  
  30.    If LenB(sUTF8) Then
  31.       On Error GoTo EndFunction
  32.       bytUtf8 = StrConv(sUTF8, vbFromUnicode)
  33.       lngUtf8Size = UBound(bytUtf8) + 1
  34.       On Error GoTo 0
  35.       'Set buffer for longest possible string i.e. each byte is
  36.       'ANSI<=&HFF, thus 1 unicode(2 bytes)for every utf-8 character.
  37.       lngBufferSize = lngUtf8Size * 2
  38.       strBuffer = String$(lngBufferSize, vbNullChar)
  39.       'Translate using code page 65001(UTF-8)
  40.       lngResult = MultiByteToWideChar(CP_UTF8, 0, bytUtf8(0), lngUtf8Size, StrPtr(strBuffer), lngBufferSize)
  41.       'Trim result to actual length
  42.       If lngResult Then
  43.          UTF8_Decode = Left$(strBuffer, lngResult)
  44.       End If
  45.    End If
  46.  
  47. EndFunction:
  48. End Function


MUCHAS GRACIAS Y ESPERO QUE ESTOS EJEMPLOS, LOS TUYOS Y LOS MIOS, LE SIRVAN A ALGUIEN... SEGURAMENTE

 ;-)UN SALUDOOOO!!!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines