From ec7b47a336f2c7749cb4986733b7d2017ae5c0f5 Mon Sep 17 00:00:00 2001 From: fdbozzo Date: Sun, 19 Feb 2017 12:25:37 +0100 Subject: [PATCH] =?UTF-8?q?filename=5Fcaps.exe:=20Agregado=20reintento=20d?= =?UTF-8?q?e=20renombrado=20para=20intentar=20prevenir=20el=20error=20espo?= =?UTF-8?q?r=C3=A1dico=20de=20"Can=20not=20create=20a=20file=20that=20alre?= =?UTF-8?q?ady=20exists"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FileName_Caps/filename_caps.prg | 44 ++++++++++++++++++++++++++++---- filename_caps.exe | Bin 30585 -> 31100 bytes 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/FileName_Caps/filename_caps.prg b/FileName_Caps/filename_caps.prg index c592838..f31e162 100644 --- a/FileName_Caps/filename_caps.prg +++ b/FileName_Caps/filename_caps.prg @@ -44,10 +44,23 @@ RETURN lcFileName DEFINE CLASS cl_FileName_Caps AS Custom + _memberdata = [] ; + + [] ; + + [] ; + + [] + PROCEDURE INIT - DECLARE INTEGER MoveFile IN KERNEL32.DLL STRING lpExistingFileName, STRING lpNewFileName + *DECLARE INTEGER MoveFile IN KERNEL32.DLL STRING lpExistingFileName, STRING lpNewFileName + + * DOCUMENTACIÓ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 Sleep IN KERNEL32.DLL INTEGER dwMilliseconds * DOCUMENTACIÓ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 ; @@ -55,9 +68,10 @@ DEFINE CLASS cl_FileName_Caps AS Custom _SCREEN.AddProperty("ExitCodeFNC",0) ENDPROC - PROCEDURE Capitalize - LPARAMETERS tcFileName, tcFileMask, tcFileMaskType, tcLog, tlRelanzarError, tcDontShowErrors - + PROCEDURE Capitalize(tcFileName, tcFileMask, tcFileMaskType, tcLog, tlRelanzarError, tcDontShowErrors) + #IF .F. + LOCAL THIS AS cl_FileName_Caps OF 'filename_caps\filename_caps.prg' + #ENDIF TRY 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 @@ -175,7 +189,7 @@ DEFINE CLASS cl_FileName_Caps AS Custom *MESSAGEBOX( 'lcLogFile = ' + TRANSFORM(lcLogFile),0+4096, 'Error' ) 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') IF lnRet = 0 && Failed @@ -237,4 +251,24 @@ DEFINE CLASS cl_FileName_Caps AS Custom RETURN lcFileName 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 diff --git a/filename_caps.exe b/filename_caps.exe index 93cf86cb8f9a2c8b71e61c80f7e1bd0f39965842..321f50f459e62df71629c2b45c9ebe01e236c8b6 100644 GIT binary patch delta 1374 zcmZuxOKcle6g_WjkL_`sA1-P0@sCE0L`hw0DpHcFjx#PUj-8GtA*BN2Hj@&`PTbf@ z3j{@#!UE`mWGYov#UgZxRH!0W2-qWmFjBK;g%DEJMpYbZ>=Ady4GD;mp5~tW?mhSO z?t9fothU9zIeO8t{^@Vbd1GsGBYg3pgC9HqJo2b5QwIlDuB4-qC?5X@%&auAla0E+bO~B~fq7s|QDdP3#wI;kF zN=Y$s;^qF4L}JsvX)mk4D81c1Ski1r=M<&zU!$_RrHl^nsOuJt+d+J(2{9H=h~lK< zA2th!t_f#FIT1&;33WDCZR`4BudJx-(h_(&A zwMqwe7+UL9+fPot88YG4T6DWpJyW<~%?bKjs_(rHwSG0AJ}mU-Z#C)dkbfVjbdl9l z9+hsQIY2ZGxoSOUHK+nE-Al@-q3yvL&4E0%Vwzgvq1_&r?!x_w7xsz|3=V^@>mH-#iVYc!;dl$t-&B8|pLogT*42~TZ2Qwr`A*pqBy#p&1iwRi0ueQS(p+13rh|)4_q98&L&5p&nO&x4Z24_r$QO0#p zI|Gd#zk@q9DqGmLk(m`A>rM>Uh{POH9_>hsiIefPOnDijN?D6;(j~<=ccBf5q$J7= z@%BbqlZ*l8cFX==FCt_nG*;4kj7RF#+$zM|D zrwIBDr=j5GY+Io{!lQwr#yC=|6jl5c{8dpuKOJKQVAN40tS!m zMyI0}@a3OoehrBVKtr+^65U@07c!&b=&&e_MC3>-F6T1F+mNJGGn7=3M|7cBn#%{; z1LT6o>;apwa@;DnhEur44Rd7{wv^ckJYXy8+QN_QhAJ(lmcw|$N+_eqR#_X1AVP8k zs|aJnc@M2@9R=4q{Oq_v`mfJU=m!C)xq(+mrXPf6;Ilp;M)GZ1cS(NjMXG@0d$j6K bAWpcSWTQW`>f^;L96g&Cu60|N=mq^7SLLxZ delta 811 zcmY*YQAkr^6#o9ZySwdf=GAO2=jN8qKqO`}Ng+t)HL|to-4x1bNp4`cT+U1(F?#bM z$bKjiddSBfA`yCv9(z?Iskfq+LXe1XuDMI+ZcudLzyCSk`ObIF;s5`GpRBOUUbT-} z_m{R<(DiUs+~Rq8$r?9}q=aaT9&@vx?<(KE6B{wi5hN7&g#GoTbq+G+LTQtD|UxUAN<9-UCbC3(8K= zM)ktfgRfu$8!G9?3G^6XL54y&DlPh5L^UV`?KPE4Cn`0FN};@mZ`^XWh3vYBH@X$> zg86|%_fRWE8%_sNAE6wvOIDq2!_U#O}$en>?NMJ6Y1 zrhHO)o@2!RM`(sr((8;_^JXNA3?0>^yTpG_k1#7A%DHRADqShZ9e6HNY?m+OhFJ^u zrsBMH=9#&Cj(lTgk+;t_TpbWVR|cqujMeXDQ!iVD!#H?A!S%_caZRFQnN%`7md!~B z-_FfUWr}pmfFEp)jfjG