filename_caps.exe: Agregado reintento de renombrado para intentar prevenir el error esporádico de "Can not create a file that already exists"
This commit is contained in:
@@ -44,10 +44,23 @@ RETURN lcFileName
|
|||||||
|
|
||||||
|
|
||||||
DEFINE CLASS cl_FileName_Caps AS Custom
|
DEFINE CLASS cl_FileName_Caps AS Custom
|
||||||
|
_memberdata = [<VFPData>] ;
|
||||||
|
+ [<memberdata name="capitalize" display="Capitalize"/>] ;
|
||||||
|
+ [<memberdata name="renamefile" display="RenameFile"/>] ;
|
||||||
|
+ [</VFPData>]
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE INIT
|
PROCEDURE INIT
|
||||||
DECLARE INTEGER MoveFile IN KERNEL32.DLL STRING lpExistingFileName, STRING lpNewFileName
|
*DECLARE INTEGER MoveFile IN KERNEL32.DLL STRING lpExistingFileName, STRING lpNewFileName
|
||||||
|
|
||||||
|
* DOCUMENTACI<43>N: https://msdn.microsoft.com/es-es/library/windows/desktop/aa365240(v=vs.85).aspx
|
||||||
|
* dwFlags:
|
||||||
|
* 1 (0x1) MOVEFILE_REPLACE_EXISTING
|
||||||
|
* 8 (0x8) MOVEFILE_WRITE_THROUGH
|
||||||
|
DECLARE INTEGER MoveFileEx IN KERNEL32.DLL STRING lpExistingFileName, STRING lpNewFileName, INTEGER dwFlags
|
||||||
|
|
||||||
DECLARE INTEGER GetLastError IN KERNEL32.DLL
|
DECLARE INTEGER GetLastError IN KERNEL32.DLL
|
||||||
|
DECLARE Sleep IN KERNEL32.DLL INTEGER dwMilliseconds
|
||||||
|
|
||||||
* DOCUMENTACI<43>N: https://msdn.microsoft.com/en-us/library/windows/desktop/ms679351(v=vs.85).aspx
|
* DOCUMENTACI<43>N: https://msdn.microsoft.com/en-us/library/windows/desktop/ms679351(v=vs.85).aspx
|
||||||
DECLARE INTEGER FormatMessage IN KERNEL32.DLL INTEGER dwFlags, INTEGER lpSource, INTEGER dwMessageId ;
|
DECLARE INTEGER FormatMessage IN KERNEL32.DLL INTEGER dwFlags, INTEGER lpSource, INTEGER dwMessageId ;
|
||||||
@@ -55,9 +68,10 @@ DEFINE CLASS cl_FileName_Caps AS Custom
|
|||||||
_SCREEN.AddProperty("ExitCodeFNC",0)
|
_SCREEN.AddProperty("ExitCodeFNC",0)
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
PROCEDURE Capitalize
|
PROCEDURE Capitalize(tcFileName, tcFileMask, tcFileMaskType, tcLog, tlRelanzarError, tcDontShowErrors)
|
||||||
LPARAMETERS tcFileName, tcFileMask, tcFileMaskType, tcLog, tlRelanzarError, tcDontShowErrors
|
#IF .F.
|
||||||
|
LOCAL THIS AS cl_FileName_Caps OF 'filename_caps\filename_caps.prg'
|
||||||
|
#ENDIF
|
||||||
TRY
|
TRY
|
||||||
LOCAL loEx AS EXCEPTION, laMasks(1,4), lcDefinition, lcFileDef, lcMaskDef, laLines(1), lcMenErr ;
|
LOCAL loEx AS EXCEPTION, laMasks(1,4), lcDefinition, lcFileDef, lcMaskDef, laLines(1), lcMenErr ;
|
||||||
, I, X, lcName, lcExt, lcPath, lcFileName, laFile(1,5), lcLogFile, lcSys16, lnPosProg, lnRet
|
, I, X, lcName, lcExt, lcPath, lcFileName, laFile(1,5), lcLogFile, lcSys16, lnPosProg, lnRet
|
||||||
@@ -175,7 +189,7 @@ DEFINE CLASS cl_FileName_Caps AS Custom
|
|||||||
*MESSAGEBOX( 'lcLogFile = ' + TRANSFORM(lcLogFile),0+4096, 'Error' )
|
*MESSAGEBOX( 'lcLogFile = ' + TRANSFORM(lcLogFile),0+4096, 'Error' )
|
||||||
|
|
||||||
IF ADIR( laFile, lcFileName, '', 1 ) > 0 AND laFile(1,1) <> JUSTFNAME(lcFileName)
|
IF ADIR( laFile, lcFileName, '', 1 ) > 0 AND laFile(1,1) <> JUSTFNAME(lcFileName)
|
||||||
lnRet = MoveFile( FORCEPATH( laFile(1,1), JUSTPATH(lcFileName) ), lcFileName )
|
lnRet = THIS.RenameFile( FORCEPATH( laFile(1,1), JUSTPATH(lcFileName) ), lcFileName )
|
||||||
*MESSAGEBOX('(MoveFile) lnRet = ' + TRANSFORM(lnRet),0+4096, 'Error')
|
*MESSAGEBOX('(MoveFile) lnRet = ' + TRANSFORM(lnRet),0+4096, 'Error')
|
||||||
|
|
||||||
IF lnRet = 0 && Failed
|
IF lnRet = 0 && Failed
|
||||||
@@ -237,4 +251,24 @@ DEFINE CLASS cl_FileName_Caps AS Custom
|
|||||||
RETURN lcFileName
|
RETURN lcFileName
|
||||||
ENDPROC
|
ENDPROC
|
||||||
|
|
||||||
|
|
||||||
|
FUNCTION RenameFile(lpExistingFileName as String, lpNewFileName as String) as Integer
|
||||||
|
* RENAME con reintento. A veces el sistema operativo puede devolver un error en los primeros intentos de renombrado,
|
||||||
|
* por ejemplo con el error "Can not create a file that already exists"
|
||||||
|
* FUENTE: http://stackoverflow.com/questions/13025313/why-os-rename-is-raising-an-exception-in-python-2-7
|
||||||
|
LOCAL lnRet
|
||||||
|
lnRet = 0
|
||||||
|
*lnRet = MoveFile( FORCEPATH( laFile(1,1), JUSTPATH(lcFileName) ), lcFileName )
|
||||||
|
|
||||||
|
FOR I = 1 TO 10
|
||||||
|
lnRet = MoveFileEx( lpExistingFileName, lpNewFileName, 0x1 + 0x8 )
|
||||||
|
IF lnRet != 0
|
||||||
|
EXIT
|
||||||
|
ENDIF
|
||||||
|
Sleep(10)
|
||||||
|
ENDFOR
|
||||||
|
RETURN lnRet
|
||||||
|
ENDFUNC
|
||||||
|
|
||||||
|
|
||||||
ENDDEFINE && CLASS cl_FileName_Caps AS Custom
|
ENDDEFINE && CLASS cl_FileName_Caps AS Custom
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user