www.clarioneros.com

El rincón de los desarrolladores
Fecha actual Lun Dic 11, 2017 9:06 pm

Todos los horarios son UTC




Nuevo tema Responder al tema  [ 3 mensajes ] 
Autor Mensaje
NotaPublicado: Mar Sep 26, 2017 4:47 pm 
Desconectado

Registrado: Mar Mar 01, 2011 8:36 pm
Mensajes: 109
Hola Gente!

Siempre que he necesitado escribir en archivos de texto, uso las API de windows, declaradas en el MAP:

MODULE('Windows API')
_lopen(*CSTRING,SIGNED),SIGNED,PASCAL,RAW
_lread(SIGNED, *CSTRING, SIGNED),SIGNED,PASCAL,RAW
_lcreat(*CSTRING,SIGNED),SIGNED,PASCAL,RAW
_hwrite(SIGNED,*CSTRING,LONG),LONG,PASCAL,RAW
_lclose(SIGNED),SIGNED,PASCAL
END

Hasta ahora la secuencia usada siempre ha sido:

F# = _lcreat(NombreArchivo,0)
X# = _hwrite(F#,Texto,LEN(Texto))
X# = _lclose(F#)

Pero el _lcreat CREA el archivo de cero como su nombre lo indica, sin importar si el mismo tiene o no contenido.

Lo que necesito hacer es verificar si el archivo existe (esto lo hago con el IF EXISTS) y en caso de que ya esté creado agregarle más lineas. Eso no sería un problema si en lugar de F# uso una variable global al crearlo que usaré luego al escribir... pero si cierro el programa, al abrirlo nuevamente pierdo el dato.

He añadido las funciones _lopen y _lread que nunca antes había usado y encontré en algún tutorial web pero no me funcionan:

F# = _lopen(NombreArchivo,0)
Texto='estoy intentando escribir en el archivo abierto'
X# = _hwrite(F#,Texto,LEN(Texto))

pero no escribe nada... gracias por cualquier ayuda! Ileana


Arriba
 Perfil Email  
 
NotaPublicado: Jue Oct 19, 2017 12:56 pm 
Desconectado

Registrado: Mié Oct 18, 2017 3:22 pm
Mensajes: 1
Module('WinApi')
CloseHandle(LONG),LONG, PASCAL, PROC
CreateFile(*CSTRING, LONG, LONG, LONG, LONG, LONG, LONG ),LONG, NAME('CreateFileA'), PASCAL, RAW
WriteFile(LONG hFile, *CSTRING lpBuffer, LONG nNumberOfBytesToWrite, *LONG lpNumberOfBytesWritten, LONG lpOverlapped), BOOL, RAW, PASCAL
End



LogToFile PROCEDURE (archivo,dato)



CREATE_NEW EQUATE(1)
FILE_ATTRIBUTE_NORMAL EQUATE(128)
OPEN_EXISTING EQUATE(3)
FILE_APPEND_DATA EQUATE(00004h)
FILE_SHARE_READ EQUATE(00000001h)
PathArchivoTXT CSTRING(255)
BufferArchivo CSTRING(10000)


PathArchivoTXT = Clip(archivo)
a# = CreateFile(PathArchivoTXT, FILE_APPEND_DATA, FILE_SHARE_READ, 0, CREATE_NEW + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
iF a# Then
BufferArchivo = Format(Today(), @d06 ) & ' ' & Format(Clock(), @t4) & ' ' & Clip(Dato) & Chr(13) & Chr(10)
WriteFile(a#, BufferArchivo, Len(Clip(BufferArchivo)), temp#, 0)
CloseHandle(a#)
End


Arriba
 Perfil Email  
 
NotaPublicado: Jue Oct 19, 2017 1:15 pm 
Desconectado

Registrado: Mar Mar 01, 2011 8:36 pm
Mensajes: 109
Muchas gracias!

En principio, ya modifiqué mi código agregando una tabla ASCII al DCT, pero está bueno no tener que depender de esto, así que lo voy a probar ni bien pueda!

Saludos!


Arriba
 Perfil Email  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 3 mensajes ] 

Todos los horarios son UTC


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Saltar a:  
cron
Powered by phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com