[Duda] Ayuda archivo con caracteres raros... D;

Iniciado por Psyke1, 24 Febrero 2011, 21:40 PM

0 Miembros y 2 Visitantes están viendo este tema.

Psyke1

Tengo un archivo con un carácter extraño. Tipo : عربي...
Entonces cuando intento copiarlo a otro lugar, me da error... Nombre de archivo incorrecto...  :-(
Alguna solucion?  :huh: :huh:

DoEvents! :P

seba123neo

#1
ni idea porque te da el error, pero son caracteres unicode, en teoria si los copias a un campo de texto que no soporta este tipo de caracter, te muestra unos signos de interrogacion ????

por ahi hubo un post donde respondi como generar estos caracteres desde visual basic.

por ejemplo a donde los queres copiar.

el explorador de windows soporta estos caracteres.
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

Psyke1

El propio proyecto de vb se llama : Holaعربي.exe
Se debe copiar el mismo a "c:\" con el nombre : "Adios.exe"
Voy a buscar ese post... ;)

DoEvents! :P

Edu

Pero no entiendo una cosa, si puedes usar lo de app.exename o q dices?

Psyke1

@seba123neo
Supongo que te refierse a esto :
http://foro.elhacker.net/programacion_visual_basic/command_extraer_archivos-t319395.0.html;msg1580388#msg1580388
Nunca antes hice esto, y si soy sincero, no entiendo algunas partes del código... :-(

Pensé algo así, pero no funciona... :xD
Código (vb) [Seleccionar]
Option Explicit

Private Declare Function GetModuleFileNameW Lib "kernel32" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileW" (ByVal lpExistingFileName As Long, ByVal lpNewFileName As Long, ByVal bFailIfExists As Long) As Long

Function WhereIam() As String
    Dim bnUffer As String * 255
    GetModuleFileNameW 0, bnUffer, 255
    WhereIam = Replace$(bnUffer, vbNullChar, vbNullString)
End Function

Private Sub Form_Load()
    CopyFile StrPtr(WhereIam), StrPtr("c:\ByeBye.exe"), 0
End Sub


@XXX-ZERO-XXX
Eso es lo primero que probé... y obvio que no funciona. :¬¬

DoEvents! :P

seba123neo

no, ese no es el post  :P

es este:

Caracteres Especiales en TextBox

PD: preguntaste vos mismo en ese post  :P
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

seba123neo

aca tenes un ejemplo de como copiar un archivo con texto unicode, el link del post es para que te fijes que cada caracter tiene su codigo, en este caso tenes caracteres arabes creo, debes buscar su codigo para poder pasarselo a ChrW(), y con la api CopyFileApiW, lo podes hacer ya que la funcion Name de visual basic no soporta unicode en los nombres de los archivos.

Código (vb) [Seleccionar]
Private Declare Function CopyFileApiW Lib "kernel32" Alias "CopyFileW" (ByVal lpExistingFileName As Long, ByVal lpNewFileName As Long, ByVal bFailIfExists As Long) As Long

Private Sub Form_Load()
    Dim retval As Long
    retval = CopyFileApiW(StrPtr("C:\" & ChrW(&H414) & ".txt"), StrPtr(StrConv("C:\copia.txt", 0)), 1)
End Sub


el archivo que copia se llama "Д.txt" es un caracter unicode de rusia y corresponde al ChrW(&H414)

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

Psyke1

Gracias por todo una vez más sebas. ;)
Dejo este código de mi amigo coco que funciona perfectamente:
Código (vb) [Seleccionar]
Option Explicit

Private Declare Function GetModuleFileNameW Lib "kernel32" (ByVal hModule As Long, ByVal lpFileName As Long, ByVal nSize As Long) As Long
Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileW" (ByVal lpExistingFileName As Long, ByVal lpNewFileName As Long, ByVal bFailIfExists As Long) As Long

Private Sub CopyMyself(ByVal strTo As String)
    Dim bvBuffer(255) As Byte
    GetModuleFileNameW 0, VarPtr(bvBuffer(0)), 254
    CopyFile VarPtr(bvBuffer(0)), StrPtr(strTo), 0
End Sub

Private Sub Form_Load()
    Call CopyMyself("C:\ByeBye.exe")
End Sub


DoEvents! :P

Edu

Cita de: XXX-ZERO-XXX en 24 Febrero 2011, 22:40 PM
Pero no entiendo una cosa, si puedes usar lo de app.exename o q dices?

Cita de: Mr.Frog™ en 25 Febrero 2011, 01:17 AM
@XXX-ZERO-XXX
Eso es lo primero que probé... y obvio que no funciona. :¬¬

DoEvents! :P

Y porq es q no funciona? Por eso q dice Seba? de q la funcion no soporta caracteres unicode?

Psyke1

Cita de: XXX-ZERO-XXX en 25 Febrero 2011, 15:22 PM
Y porq es q no funciona? Por eso q dice Seba? de q la funcion no soporta caracteres unicode?
Si.

DoEvents! :P