Domingo 22 de Diciembre de 2024, 19:49
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Crear nombre de archivo, en cualquier idioma. Ej: ごはぁ~ん.txt
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Crear nombre de archivo, en cualquier idioma. Ej: ごはぁ~ん.txt (Leído 2619 veces)
ProgramadorVB
Nuevo Miembro
Mensajes: 10
Crear nombre de archivo, en cualquier idioma. Ej: ごはぁ~ん.txt
«
en:
Jueves 20 de Mayo de 2010, 22:11 »
0
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, necesito poder crear un archivo con este nombre...
C:ごはぁ~ん.txt
es un ejemplo, podría necesitar crearlo en ruso, o en inglés, pero con inglés no es el problema... el problema es para los caracteres "raros"...
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.
Tweet
Nebire
Miembro HIPER activo
Mensajes: 670
Re: Crear nombre de archivo, en cualquier idioma. Ej: ごはぁ~ん.txt
«
Respuesta #1 en:
Viernes 21 de Mayo de 2010, 18:50 »
0
Esto depende del idioma instalado en la máquina. Según el idioma instalado en la máquina se utiliza el conjunto de caracteres en ese idioma.
Adicionalmente pudera necesitarse usar en ocasiones la función strconv, por ejemplo para las conversiones de 'Kanji'.
Es indispensable en cualquier caso que la instalación del S.O. tenga activado (cuando se instaló el S.O.) 'escritura compleja', lo que se refleja en ese servicio 'inabortable' llamado 'CtfMon.exe'
Desde luego no vas poder crear carpetas con caracteres cirílicos en ordenador cuya instalación es en caracteres oocidentales, después de todo los caracteres no son más que imágenes, representaciones gráficas de un valor numérico. Toda la info del sistema (nombre de carpetas, botones cerrar, maximizar,etc...) se representan exclusivamente con la grafía instalada. sin embargo nada te impide crear el contenido de un txt con la grafía que quieras, para ello sólo necesitas indicar la fuente requerida.
Cuando se coinstalan 2 idiomas en un equipo, tampoco, la coinstalación suele referirse exclusivamente al reparto de las teclas sobre el teclado y por tanto tener disponibles ciertos caracteres sin usar combinaciones.
Por último te recuerdo que los nombres de archivos y carpetas está delimitado a un conjunto de caracteres específico, para probarlo crea un archivo e intenta meter un asterisco en medio del nombre...
«Ma non troppo»
----> ModoVacaciones = False<----
ProgramadorVB
Nuevo Miembro
Mensajes: 10
Re: Crear nombre de archivo, en cualquier idioma. Ej: ごはぁ~ん.txt
«
Respuesta #2 en:
Viernes 21 de Mayo de 2010, 19:58 »
0
Hola,
Gracias por la respuesta...
Todos eso lo tengo en cuenta y aporta, pero aún necesito una solución...
Te comento... les comento algo...
Cuando descargo un programa, un archivo de música o cualquier archivo... por ejemplo... con el gestor de descargas IDM... descarga el archivo respetando el nombre... o sea... si descargo un MP3 en japonés, por ejemplo "音楽.mp3"... se guarda en mi PC un archivo con igual nombre... por ejemplo: "C:音楽.mp3"
A esto es a lo que me refiero...
Necesito poder crear desde visualbasic 6, un archivo (cualquiera para empezar) con nombres como éste...
¿Alguien sabe que API o método usar para crear archivos así?
De verdad necesito una solución, aparte, esto seguramente le servirá a otra persona... en el futuro
Espero que con la ayuda de la comunidad... encuentre la solución
GRacias!!
Nebire
Miembro HIPER activo
Mensajes: 670
Re: Crear nombre de archivo, en cualquier idioma. Ej: ごはぁ~ん.txt
«
Respuesta #3 en:
Domingo 23 de Mayo de 2010, 01:13 »
0
Creo que me he explicado bien...
El archivo se te descarga con el nombre original, pero cuando se guarda los caracteres (la grafía) son truncados, tu no verás esos caracteres en tu equipo que está en idioma español, pero el nombre correcto está ahí.
Sea el nombre de un archivo tal que éste: [香港][林正英][经典系列][洪福齐天].mpg
Tu verás algo como esto:
Tu en VB no podrás recibir una cadena de texto, sino una matriz de bytes y como tal puedes tratarla (ten en cuenta que lo más probable es que use 2 bytes por carácter), lo que no podrás hacer NUNCA es que se vea la GRAFIA original si no coincide con la GRAFÍA del idioma que está instalado en tu equipo, sin embargo el nombre es creado...
Un equipo sólo acepta una grafía a la vez, la que corresponde al idioma instalado (panel de control,configuración regional y de idioma) . Los nombres de archivos y de carpetas se guardan pero los caracteres que te aparecerán será como el dibujo, ilegible excepto para quien tenga dicho idioma puesto en su idioma.
VB opera con Unicode, pero de cada adentro lo 'traduce' a ANSI, lo que resulta en un truncado que puede inutilizar los datos. Por ello hay que actuar sabiendo lo que se hace.
De entrada si tu aplicación debe mostrar una interfaz, por ejemplo en chino, debes cargar un conjunto de controles que en vez de ANSI utilicen realmente Unicode, estos controles son controles comunes, si miras en componentes localiza Microsoft forms2 y márcalo. Los controles que provee si permiten unicode, ahora por ejemplo cuando cargues un textbox, cambia la fuente a un tipo de grafía china, por ejemplo 'Ming Liu'.
Luego tu problema de abrir un fichero lo podemos resolver con la API CreateFile, pero no la normal sino la 'wide', yo te pongo una de ejemplo, con los parámetros, la declaración de los parámetros y un valor de ejemplo:
Código: Visual Basic
Private
Declare
Function
CrearFichero Lib
"kernel32"
Alias
"CreateFileW"
(
ByVal
Ruta
As
String
,
ByVal
ModoAcceso
As
Long
,
ByVal
ModeCompartido
As
Long
,
byref
AttributosSeguridad
As
AtributosDeSeguridad,
ByVal
Modoapertura
As
AccionFichero,
ByVal
AtributosYBanderas
As
Long
,
ByVal
Plantilla
As
Long
)
As
Long
Private
Type
AtributosDeSeguridad
Tamaño
As
Long
' tamaño en bytes de la estructura 10
Descriptor
As
Long
' puntero a un descriptor que controla la compartición del uso del fichero. 0 = se asigna por defecto al proceso que lo llama.
Heredable
As
Boolean
' indica si un nuevo proceso (cuando se crea) hereda el manejador (handle)
End
Type
Dim
AtSeg
as
AtributosDeSeguridad
' declaración para esta opción
AtSeg.Tamaño= 10
' la estructura puede pasarse vacía sin problemas...
Private
Enum
AccionFichero
ACCION_CREAR_NUEVO = 1
' Crea un nuevo fichero, si existe ya, falla
ACCION_CREAR_SIEMPRE = 2
' Crea un nuevo fichero, si existe es sobrescrito.
ACCION_ABRIR_SOLO_SI_EXISTE = 3
' Abre un fichero, si no existe falla.
ACCION_ABRIR_SIEMPRE = 4
' Abre un fichero, si no existe se crea
ACCION_TRUNCAR_SOLO_SI_EXISTE = 5
' abre un fichero y lo sobrescribe (borra su contenido), si no existe falla (debe abrirse para escritura obligatoriamente, para lectura es opcional...
End
Enum
dim
ModoAp
as
AccionFichero
' declaración para esta opción
ModoAp = ACCION_ABRIR_SIEMPRE
' ejemplo de valor
Es im portante saber que un fichero abierto con CreateFile debe ser cerrado con CloseHandle, de lo contrario el fichero quedará 'pillado'...
Código: Visual Basic
dim
ff
as
long
' si falla devuelve -1.
ff = Crearfichero(..., ..., ...)
if
ff <> -1
then
ff = CloseHandle(ff)
' si tiene éxito devuelve 1, si falla devuelve 0
end
if
Un ejemplo para crear un fichero...
Código: Visual Basic
public
function
Crear
as
long
Dim
b()
As
Byte
Dim
ff
As
Long
Dim
RutaFichero
as
string
Dim
fa
As
VbFileAttribute
' atributos para el fichero
Dim
AtSeg
as
AtributosDeSeguridad
Dim
ModoAp
as
AccionFichero
Const ACCESO_MODO_ESCRITURA = 2 ^ 30
const COMPARTIR_MODO_ESCRITURA = 2
const BANDERA_ACCESO_ALEATORIO = 268435456
ModoAp = ACCION_ABRIR_SIEMPRE
fa = vbNormal
' atributo normal , ¿ 128 ?
ReDim
b(0
To
19)
b(0) = &H39: b(1) = &H4E: b(2) = &H39: b(3) = &H4E: b(4) = &H39: b(5) = &H4E: b(6) = &H39: b(7) = &H4E
b(8) = &H39: b(9) = &H4E: b(10) = &H39: b(11) = &H4E
b(12) = 0: b(13) = 46: b(14) = 0: b(15) = 84: b(16) = 0: b(17) = 88: b(18) = 0: b(19) = 84
RutaFichero = b
ff = CrearFichero(RutaFichero, ACCESO_MODO_ESCRITURA , COMPARTIR_MODO_ESCRITURA , AtSeg, ModoAp , fa + BANDERA_ACCESO_ALEATORIO , 0)
Crear = ff
' if ff <> -1 then
' Msgbox "el fichero ha sido abierto/creado... verifícalo en la carpeta de tu proyecto"
' ff = closeHandle(ff)
' if ff = 1 then
' msgbox "El fichero ha sido cerrado.."
' end if
' end if
end
function
NOTA: Si posas el cursor sobre la variable Rutafichero verás que muestra ????????... porque al volcar al intellisense, traduce a ANSI su contenido, pero en memoria están los bytes correctamente.
Se crea un fichero con este nombre: 㩃停橩浡獡琮瑸 sin embargo la grafía resulta ilegible como ya te he explicado.
No me preguntes el significado, no entiendo el chino, es sólo un ejemplo.
Tendrás que usar Readfile y Writefile para manejar el contendo.
«Ma non troppo»
----> ModoVacaciones = False<----
ProgramadorVB
Nuevo Miembro
Mensajes: 10
Re: Crear nombre de archivo, en cualquier idioma. Ej: ごはぁ~ん.txt
«
Respuesta #4 en:
Domingo 23 de Mayo de 2010, 06:17 »
0
GRACIAS, PROBLEMA RESUELTO...
Nebire
Miembro HIPER activo
Mensajes: 670
Re: Crear nombre de archivo, en cualquier idioma. Ej: ごはぁ~ん.txt
«
Respuesta #5 en:
Martes 25 de Mayo de 2010, 04:51 »
0
Pués me alegro, porque iba a decirte que mi tiempo no da para repasar los proyectos de la gente... puedo atender dudas puntuales...
Sobre windows Form2, quizás entendiste mal. Te decía que se deben utilizar si TU INTERFAZ tiene que mostrar caracteres unicode, pero éste no es tu caso, después de leerte...
«Ma non troppo»
----> ModoVacaciones = False<----
ProgramadorVB
Nuevo Miembro
Mensajes: 10
Re: Crear nombre de archivo, en cualquier idioma. Ej: ごはぁ~ん.txt
«
Respuesta #6 en:
Martes 25 de Mayo de 2010, 06:59 »
0
Hola nuevamente,
Sí te entiendo... por eso seguí revisando y buscando la solución por mi cuenta, hasta que la encontré... te agradezco por tu ayuda que sirvió para entender algunas cosas.
Además... en este caso estaba necesitando (primero) crear un nombre de archivo Unicode... y por este caso puntual abrí el post... pero también es mi caso la interfaz (desde ahora)... pero para esto, ya se que debo usar el "forms2"... ya que es todo lo que necesito... en definitiva...
Gracias por la comprensión y paciencia...
Un saludo y felicidades.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Crear nombre de archivo, en cualquier idioma. Ej: ごはぁ~ん.txt