FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour FWrite(). No logro escribir en un fichero
Posts: 21
Joined: Wed Apr 02, 2014 02:14 PM
FWrite(). No logro escribir en un fichero
Posted: Wed Apr 23, 2014 05:07 PM

Hola :-)
Me pasa que tengo que rellenar un fichero con texto. Creo el fichero correctamente, pero no se escribe nada. Paso un trozo de lo que hago con un ejemplo simplificado:
static function CrearFichero()

Local lLinea := ""

// Creo el nombre del fichero. Tiene 21 caracteres + la extensi贸n .txt
oVar:cFichero := "COLE"+;
"61420"+;
Alltrim(Str(Year(Date())))+;
Right("00"+Alltrim(Str(month(Date()))),2)+;
Right("00"+Alltrim(Str(Day(Date()))),2)+;
SubStr(Time(),1,2)+;
SubStr(Time(),4,2)+;
"IPLIQF"+;
".txt"

/ Si existe un fichero con el mismo nombre, elimino el previo.
if file(oVar:cFichero)
DELETE FILE (oVar:cFichero)
MsgInfo("Fichero borrado")
endif

// Creo el fichero. Lo hace correctamente
if oVar:cHFichero := FCreate(oVar:cFichero, 0) == -1
MsgAlert("No se ha podido crear el fichero de exportaci贸n: "+oVar:cFichero)
return .T.
endif

// Texto a introducir en el fichero.
llinea := "HOLA"

// Escribo en el fichero.
FWrite(oVar:cHFichero, llinea)

// Cierro el fichero
FClose(oVar:cHFichero)

* Al final de la funci贸n tengo un mensaje para indicar si ha terminado. Aparece el mensaje pero ni ha escrito nada ni ha hecho nada con el fichero (tambi茅n tengo puesto que lo copie a otro directorio)
Mientras est谩 la aplicaci贸n funcionando, si intento abrir el fichero, Windows me avisa de que el fichero est谩 siendo usado.

La verdad es que es un poco extra帽o pues en la versi贸n 16 bits del programa (FW+Clipper) lo hace todo perfectamente.

Saludos :-)

Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: FWrite(). No logro escribir en un fichero
Posted: Wed Apr 23, 2014 05:32 PM
Code (fw): Select all Collapse
#include "FiveWin.ch"

//----------------------------------------------------------------------------//

function Main()

   local cFile   := LCreat( "File.txt" )
   local cText := "FiveWin the best"

   FWrite( cFile, @cText, Len( cText ) )

   LClose( cFile )

return nil
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: FWrite(). No logro escribir en un fichero
Posted: Wed Apr 23, 2014 05:51 PM


Code (fw): Select all Collapse
#include "FiveWin.ch"

function Main()


   LOCAL cFile := fCreate( "nota.txt" )
   LOCAL ctxt  := "TESTE DE FWRITE"

   fWrite( cFile, ctxt, len( ctxt ) )

   fClose( cFile )

return nil
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 21
Joined: Wed Apr 02, 2014 02:14 PM
Re: FWrite(). No logro escribir en un fichero
Posted: Wed Apr 23, 2014 06:04 PM

OK, gracias :-)

Posts: 8523
Joined: Tue Dec 20, 2005 07:36 PM
Re: FWrite(). No logro escribir en un fichero
Posted: Wed Apr 23, 2014 06:17 PM
En tu caso:

Code (fw): Select all Collapse
   // Creo el nombre del fichero. Tiene 21 caracteres + la extensi贸n .txt
   oVar:cFichero := LCreat( "COLE"+;
                            "61420"+;
                             Alltrim(Str(Year(Date())))+;
                             Right("00"+Alltrim(Str(month(Date()))),2)+;
                             Right("00"+Alltrim(Str(Day(Date()))),2)+;
                             SubStr(Time(),1,2)+;
                             SubStr(Time(),4,2)+;
                            "IPLIQF"+;
                            ".txt" )


Mira \samples\LONGNAME.PRG

Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 94
Joined: Tue Mar 28, 2006 04:09 PM
Re: FWrite(). No logro escribir en un fichero
Posted: Fri Apr 25, 2014 11:02 PM
Hola, yo uso la clase TTxtFile, y me funciona muy bien...

Code (fw): Select all Collapse
聽 聽 聽 聽 聽 IF FILE(cArchivo)
聽 聽 聽 聽 聽 聽 fErase(cArchivo)
聽 聽 聽 聽 聽 ENDIF

聽 聽 聽 聽 聽 IF FILE(cDestino)
聽 聽 聽 聽 聽 聽 fErase(cDestino)
聽 聽 聽 聽 聽 ENDIF

聽 聽 聽 聽 聽 WITH OBJECT oFile := TTxtFile():New( cDestino )

聽 聽 聽 聽 聽 聽 聽 IF :Open()
聽 聽 聽 聽 聽 聽 聽 聽 聽 oDetalle:Gotop()
聽 聽 聽 聽 聽 聽 聽 聽 聽 DO WHILE ! oDetalle:Eof()
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 :Add(oDetalle:cDetalle)
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 oDetalle:Skip()
聽 聽 聽 聽 聽 聽 聽 聽 聽 ENDDO
聽 聽 聽 聽 聽 聽 聽 ENDIF

聽 聽 聽 聽 聽 聽 聽 :End()

聽 聽 聽 聽 聽 END WITH


Saludos
Luis Fernando Rubio Rubio
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: FWrite(). No logro escribir en un fichero
Posted: Sat Apr 26, 2014 02:43 PM
Francisco J. Alegr铆a P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql
Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
Re: FWrite(). No logro escribir en un fichero
Posted: Mon Apr 28, 2014 10:42 AM
Hola mlolo,

驴Podr铆as probar una peque帽a modificaci贸n?
Donde dice
mlolo wrote:
// Creo el fichero. Lo hace correctamente
if oVar:cHFichero := FCreate(oVar:cFichero, 0) == -1
MsgAlert("No se ha podido crear el fichero de exportaci贸n: "+oVar:cFichero)
return .T.
endif


Cambiarlo por
mlolo wrote:
// Creo el fichero. Lo hace correctamente
if (oVar:cHFichero := FCreate(oVar:cFichero, 0)) == -1
MsgAlert("No se ha podido crear el fichero de exportaci贸n: "+oVar:cFichero)
return .T.
endif



Creo que la asignaci贸n (:=) se ejecuta posterior a la comparaci贸n (==), entonces oVar:cHFichero quedaba igual a .F. en lugar del Handle del fichero.

Un saludo
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
鈥淚f you think education is expensive, try ignorance"

Continue the discussion