diff --git a/foxbin2prg.prg b/foxbin2prg.prg
index 5000c69..dea3142 100644
--- a/foxbin2prg.prg
+++ b/foxbin2prg.prg
@@ -502,6 +502,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
@@ -548,6 +549,7 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
+ [] ;
+ [] ;
+ [] ;
+ + [] ;
+ [] ;
+ [] ;
+ [] ;
@@ -1424,6 +1426,84 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
ENDPROC
+ FUNCTION FilesComparedAreEqual
+ *---------------------------------------------------------------------------------------------------
+ * PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
+ * tcFilename1 (v! IN ) Nombre del archivo1 a comparar
+ * tcFilename2 (v! IN ) Nombre del archivo2 a comparar
+ * tcStrFileName2 (v! IN ) ***NO IMPLEMENTADO*** Contenido del archivo2 a comparar
+ *---------------------------------------------------------------------------------------------------
+ LPARAMETERS tcFilename1, tcFilename2, tcStrFileName2
+
+ LOCAL lnComparacion, lnLen1, lnLen2, lnHandle1, lnHandle2, lnTipoComp, lnChunkSize ;
+ , loEx as Exception
+
+ TRY
+ STORE -1 TO lnComparacion, lnHandle1, lnHandle2
+ lnTipoComp = 0
+ lnChunkSize = 65535
+
+ DO CASE
+ CASE NOT EMPTY(tcFilename1) AND NOT EMPTY(tcFilename2)
+ lnTipoComp = 1
+ lnHandle1 = FOPEN( tcFilename1 )
+
+ IF lnHandle1 = -1
+ EXIT
+ ENDIF
+
+ lnHandle2 = FOPEN( tcFilename2 )
+
+ IF lnHandle2 = -1
+ EXIT
+ ENDIF
+
+ lnLen1 = FSEEK( lnHandle1, 0, 2 )
+ lnLen2 = FSEEK( lnHandle2, 0, 2 )
+
+ *-- Comparación de tamaño
+ IF lnLen1 <> lnLen2 THEN
+ lnComparacion = 0 && Son distintos
+ EXIT
+ ENDIF
+
+ *-- Comparación de contenido
+ FSEEK( lnHandle1, 0, 0 )
+ FSEEK( lnHandle2, 0, 0 )
+
+ DO WHILE NOT ( FEOF(lnHandle1) OR FEOF(lnHandle2) )
+ IF NOT SYS( 2007, FREAD( lnHandle1, lnChunkSize ), -1, 1 ) == SYS( 2007, FREAD( lnHandle2, lnChunkSize ), -1, 1 ) THEN
+ lnComparacion = 0 && Son distintos
+ EXIT
+ ENDIF
+ ENDDO
+
+ IF lnComparacion = 0 THEN
+ EXIT
+ ENDIF
+
+ lnComparacion = 1 && Son iguales
+
+ ENDCASE
+
+ CATCH TO loEx
+ lnComparacion = -1 && Error
+ THROW
+
+ FINALLY
+ DO CASE
+ CASE lnTipoComp = 1
+ FCLOSE( lnHandle1 )
+ FCLOSE( lnHandle2 )
+
+ ENDCASE
+
+ ENDTRY
+
+ RETURN lnComparacion
+ ENDFUNC
+
+
FUNCTION FilenameFoundInFilter
*---------------------------------------------------------------------------------------------------
* PARÁMETROS: (v=Pasar por valor | @=Pasar por referencia) (!=Obligatorio | ?=Opcional) (IN/OUT)
@@ -2357,6 +2437,30 @@ DEFINE CLASS c_foxbin2prg AS CUSTOM
ENDPROC
+ *******************************************************************************************************************
+ PROCEDURE RenameTmpFile2Tx2File
+ LPARAMETERS tcFileName
+
+ LOCAL lcTmpFile, loFSO AS Scripting.FileSystemObject, loEx as Exception
+
+ TRY
+ *loFSO = THIS.o_FSO
+ lcTmpFile = tcFileName + '.TMP'
+ THIS.ChangeFileAttribute( tcFileName, '+N' )
+ ERASE (tcFileName)
+ RENAME (lcTmpFile) TO (tcFileName)
+
+ CATCH TO loEx
+ THROW
+
+ FINALLY
+ *loFSO = NULL
+ ENDTRY
+
+ RETURN
+ ENDPROC
+
+
*******************************************************************************************************************
PROCEDURE writeErrorLog
LPARAMETERS tcText
@@ -11482,20 +11586,20 @@ DEFINE CLASS c_conversor_dbf_a_prg AS c_conversor_bin_a_prg
FWRITE( toFoxBin2Prg.n_FileHandle, C_FB2PRG_CODE )
loTable.toText( ln_HexFileType, ll_FileHasCDX, ll_FileHasMemo, ll_FileIsDBC, lc_DBC_Name, .c_InputFile, lc_FileTypeDesc, @toFoxBin2Prg )
FCLOSE( toFoxBin2Prg.n_FileHandle )
- *fdb*
+
- *-- Genero el DB2
+ *-- Genero el DB2, renombrando el TMP
IF .l_Test
toModulo = C_FB2PRG_CODE
ELSE
- lnLen = 1 &&LEN( toFoxBin2Prg.get_PROGRAM_HEADER() )
DO CASE
- CASE FILE(.c_OutputFile) AND SUBSTR( FILETOSTR( .c_OutputFile ), lnLen ) == SUBSTR( C_FB2PRG_CODE, lnLen )
+ CASE FILE(.c_OutputFile) AND toFoxBin2Prg.FilesComparedAreEqual( .c_OutputFile + '.TMP', .c_OutputFile ) = 1
+ ERASE (.c_OutputFile + '.TMP')
*.writeLog( 'El archivo de salida [' + .c_OutputFile + '] no se sobreescribe por ser igual al generado.' )
.writeLog( TEXTMERGE(C_OUTPUT_FILE_IS_NOT_OVERWRITEN_LOC) )
CASE toFoxBin2Prg.doBackup( .F., .T., '', '', '' ) ;
AND toFoxBin2Prg.ChangeFileAttribute( .c_OutputFile, '-R' ) ;
- AND STRTOFILE( C_FB2PRG_CODE, .c_OutputFile ) = 0
+ AND NOT toFoxBin2Prg.RenameTmpFile2Tx2File( .c_OutputFile )
*ERROR 'No se puede generar el archivo [' + .c_OutputFile + '] porque es ReadOnly'
ERROR (TEXTMERGE(C_CANT_GENERATE_FILE_BECAUSE_IT_IS_READONLY_LOC))
ENDCASE