FWrite(). No logro escribir en un fichero

FWrite(). No logro escribir en un fichero

Postby mlolo » Wed Apr 23, 2014 5: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 :-)
mlolo
 
Posts: 21
Joined: Wed Apr 02, 2014 2:14 pm

Re: FWrite(). No logro escribir en un fichero

Postby karinha » Wed Apr 23, 2014 5:32 pm

Code: Select all  Expand view

#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
User avatar
karinha
 
Posts: 7352
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: FWrite(). No logro escribir en un fichero

Postby karinha » Wed Apr 23, 2014 5:51 pm

ó

Code: Select all  Expand view

#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
User avatar
karinha
 
Posts: 7352
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: FWrite(). No logro escribir en un fichero

Postby mlolo » Wed Apr 23, 2014 6:04 pm

OK, gracias :-)
mlolo
 
Posts: 21
Joined: Wed Apr 02, 2014 2:14 pm

Re: FWrite(). No logro escribir en un fichero

Postby karinha » Wed Apr 23, 2014 6:17 pm

En tu caso:

Code: Select all  Expand view

   // 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
User avatar
karinha
 
Posts: 7352
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: FWrite(). No logro escribir en un fichero

Postby derpipu » Fri Apr 25, 2014 11:02 pm

Hola, yo uso la clase TTxtFile, y me funciona muy bien...

Code: Select all  Expand view

          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
derpipu
 
Posts: 94
Joined: Tue Mar 28, 2006 4:09 pm
Location: Tequila, Jalisco Mexico

Re: FWrite(). No logro escribir en un fichero

Postby FranciscoA » Sat Apr 26, 2014 2:43 pm

Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2114
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: FWrite(). No logro escribir en un fichero

Postby Carlos Mora » 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
“If you think education is expensive, try ignorance"
Carlos Mora
 
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 42 guests