Hello
See below the actual state of my function SETFDATI(). You can see here where was the problem.
I don't give functions used in SETFDATI() like HEURES() who give the space time between two times in "C" type,
and HEURESADD() who add hours, minutes and seconds in "C" type also.
Regards
*****************
FUNCTION SETFDATI(CFIC, QDATE, QHEURE)
*****************
* Enregistrement de la date et l'heure d'un fichier quelconque
LOCAL nDatePlus := 0
LOCAL cHeureDiff := "00:00:00"
LOCAL nATTRIB
LOCAL nIDENT
LOCAL nHeures
LOCAL nMinutes
LOCAL nSecondes
LOCAL dFDate := FILEDATE( CFIC )
LOCAL hFHeure := FILETIME( CFIC )
LOCAL HeureCalc
IF dFDate = QDATE .AND. hFHeure = QHEURE
* Ok : rien à faire
RETURN NIL
ENDIF
nATTRIB := FILEATTR( CFIC )
IF nATTRIB > 0
SETFATTR(CFIC, 0)
ENDIF
nIDENT := FOPEN( CFIC, 18 )
IF nIDENT >= 0
IF ISCLIPPER()
SetFTime( nIDENT, LEFT(QHEURE,6) + PADL( INT( VAL( SUBSTR(QHEURE,7,2) ) / 2), 2, "0") , ;
QDATE )
FCLOSE( nIDENT )
ELSE
SetFTime( nIDENT, QHEURE, QDATE )
dFDate := FILEDATE( CFIC )
hFHeure := FILETIME( CFIC )
FCLOSE( nIDENT )
IF dFDate != QDATE .OR. hFHeure != QHEURE
/* Si SetFTime() n'a pas affecté les bonnes date et heure au fichier (décalage temps GMT avec FWH86 ! ) */
IF dFDate > QDATE
nDatePlus := 1
ELSEIF dFDate < QDATE
nDatePlus := -1
ELSE
nDatePlus := 0
ENDIF
IF nDatePlus > 0
* Si la date du fichier est supérieure à celle voulue !
cHeureDiff := "-" + HEURES(QHEURE, hFHeure)
ELSEIF nDatePlus < 0
cHeureDiff := HEURES(hFHeure, QHEURE)
ELSEIF QHEURE < hFHeure
cHeureDiff := "-" + HEURES(QHEURE, hFHeure)
ELSEIF QHEURE > hFHeure
cHeureDiff := HEURES(hFHeure, QHEURE)
ELSE
cHeureDiff := "00:00:00"
ENDIF
nIDENT := FOPEN( CFIC, 18 )
IF nIDENT >= 0
HeureCalc := SETFDATIH(QHEURE, cHeureDiff, @QDATE)
SetFTime( nIDENT, HeureCalc, DTOS( QDATE ) )
FCLOSE( nIDENT )
ENDIF
ENDIF
ENDIF
ENDIF
IF nATTRIB > 0
SETFATTR(CFIC, nATTRIB)
ENDIF
RETURN NIL
******************
FUNCTION SETFDATIH(QHEURE, cHeureDiff, QDATE)
******************
LOCAL cHeureNouv := LTRIM( HEURESADD( QHEURE, cHeureDiff ) )
IF LEFT(cHeureNouv,1) = "-"
cHeureNouv := LTRIM( HEURESADD( "24:00:00", cHeureNouv ) )
QDATE := QDATE - 1
ELSEIF VAL( LEFT(cHeureNouv, AT(":", cHeureNouv) -1 ) ) >= 24
cHeureNouv := LTRIM( HEURESADD( "-24:00:00", cHeureNouv ) )
QDATE := QDATE + 1
ENDIF
cHeureNouv := PADL(cHeureNouv, 8, "0")
RETURN cHeureNouv