Replace Scripting.FileSystemObject MoveFile with Win32API equivalent

This commit is contained in:
fdbozzo
2017-02-18 16:11:01 +01:00
parent ba0c735883
commit 2aac428525
6 changed files with 51 additions and 17 deletions

View File

@@ -25,7 +25,7 @@ _LegalCopyright = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa):
_LegalTrademark = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa): http://creativecommons.org/licenses/by/4.0/" _LegalTrademark = "Creative Commons 4: Reconocimiento - CompartirIgual (by-sa): http://creativecommons.org/licenses/by/4.0/"
_ProductName = "FILENAME_CAPS" _ProductName = "FILENAME_CAPS"
_MajorVer = "2" _MajorVer = "2"
_MinorVer = "3" _MinorVer = "4"
_Revision = "0" _Revision = "0"
_LanguageID = "" _LanguageID = ""
_AutoIncrement = "0" _AutoIncrement = "0"
@@ -33,7 +33,7 @@ _AutoIncrement = "0"
*<BuildProj> *<BuildProj>
*<.HomeDir = 'c:\desa\filename_caps' /> *<.HomeDir = 'c:\desa\foxbin2prg\filename_caps' />
FOR EACH loProject IN _VFP.Projects FOXOBJECT FOR EACH loProject IN _VFP.Projects FOXOBJECT
loProject.Close() loProject.Close()

Binary file not shown.

Binary file not shown.

View File

@@ -45,19 +45,34 @@ RETURN lcFileName
DEFINE CLASS cl_FileName_Caps AS Custom DEFINE CLASS cl_FileName_Caps AS Custom
PROCEDURE INIT
DECLARE INTEGER MoveFile IN KERNEL32.DLL STRING lpExistingFileName, STRING lpNewFileName
DECLARE INTEGER GetLastError IN KERNEL32.DLL
* 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 ;
, INTEGER dwLanguageId, STRING @lpBuffer, INTEGER nSize, INTEGER Arguments
_SCREEN.AddProperty("ExitCodeFNC",0)
ENDPROC
PROCEDURE Capitalize PROCEDURE Capitalize
LPARAMETERS tcFileName, tcFileMask, tcFileMaskType, tcLog, tlRelanzarError, tcDontShowErrors LPARAMETERS tcFileName, tcFileMask, tcFileMaskType, tcLog, tlRelanzarError, tcDontShowErrors
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 ; , I, X, lcName, lcExt, lcPath, lcFileName, laFile(1,5), lcLogFile, lcSys16, lnPosProg, lnRet
, loFSO AS Scripting.FileSystemObject
lnRet = 0
loEx = NULL loEx = NULL
loFSO = CREATEOBJECT('Scripting.FileSystemObject')
tcFileMaskType = EVL(tcFileMaskType,'M') tcFileMaskType = EVL(tcFileMaskType,'M')
lcFileName = tcFileName lcFileName = tcFileName
lcLogFile = FORCEEXT(SYS(16),'LOG') lcSys16 = SYS(16)
IF LEFT(lcSys16,10) == 'PROCEDURE '
lnPosProg = AT(" ", lcSys16, 2) + 1
ELSE
lnPosProg = 1
ENDIF
lcLogFile = FORCEEXT( SUBSTR( lcSys16, lnPosProg ), 'LOG' )
tcLog = '' tcLog = ''
tcDontShowErrors = EVL( tcDontShowErrors, '0' ) tcDontShowErrors = EVL( tcDontShowErrors, '0' )
@@ -66,13 +81,6 @@ DEFINE CLASS cl_FileName_Caps AS Custom
tcLog = tcLog + CR_LF + '- No hay m<>scara definida ni archivo de configuraci<63>n' tcLog = tcLog + CR_LF + '- No hay m<>scara definida ni archivo de configuraci<63>n'
EXIT && No se indic<69> nada que hacer EXIT && No se indic<69> nada que hacer
ELSE ELSE
lcSys16 = SYS(16)
IF LEFT(lcSys16,10) == 'PROCEDURE '
lnPosProg = AT(" ", lcSys16, 2) + 1
ELSE
lnPosProg = 1
ENDIF
tcFileMask = FORCEEXT( SUBSTR( lcSys16, lnPosProg ), 'CFG' ) tcFileMask = FORCEEXT( SUBSTR( lcSys16, lnPosProg ), 'CFG' )
tcLog = tcLog + CR_LF + '- Se usar<61> el archivo de configuraci<63>n [' + tcFileMask + ']' tcLog = tcLog + CR_LF + '- Se usar<61> el archivo de configuraci<63>n [' + tcFileMask + ']'
IF NOT FILE(tcFileMask) IF NOT FILE(tcFileMask)
@@ -163,9 +171,19 @@ DEFINE CLASS cl_FileName_Caps AS Custom
EXIT EXIT
ENDIF ENDIF
ENDFOR ENDFOR
*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)
loFSO.MoveFile( FORCEPATH( laFile(1,1), JUSTPATH(lcFileName) ), lcFileName ) lnRet = MoveFile( FORCEPATH( laFile(1,1), JUSTPATH(lcFileName) ), lcFileName )
*MESSAGEBOX('(MoveFile) lnRet = ' + TRANSFORM(lnRet),0+4096, 'Error')
IF lnRet = 0 && Failed
lnRet = GetLastError()
*MESSAGEBOX('(GetLastError) lnRet = ' + TRANSFORM(lnRet),0+4096, 'Error')
ERROR 'MoveFile'
ENDIF
tcLog = tcLog + CR_LF + ' => Se renombrar<61> a [' + lcFileName + ']' tcLog = tcLog + CR_LF + ' => Se renombrar<61> a [' + lcFileName + ']'
ELSE ELSE
tcLog = tcLog + CR_LF + ' => No se renombrar<61> a [' + lcFileName + '] porque ya estaba correcto.' tcLog = tcLog + CR_LF + ' => No se renombrar<61> a [' + lcFileName + '] porque ya estaba correcto.'
@@ -173,6 +191,19 @@ DEFINE CLASS cl_FileName_Caps AS Custom
CATCH TO loEx CATCH TO loEx
_SCREEN.ExitCodeFNC = loEx.ErrorNo
IF loEx.ErrorNo = 1098 && User defined error
IF LOWER(loEx.Message) == 'movefile'
* SE OBTIENE EL MENSAJE DE ERROR DEL SISTEMA CORRESPONDIENTE A GetLastError()
* FORMAT_MESSAGE_FROM_SYSTEM 0x00001000
LOCAL lnRetLen, lpBuffer
lpBuffer = REPLICATE(CHR(0),256)
lnRetLen = FormatMessage(0x00001000,0,lnRet,0,@lpBuffer,256,0)
loEx.Message = LEFT(lpBuffer, lnRetLen)
ENDIF
ENDIF
IF tlRelanzarError THEN IF tlRelanzarError THEN
THROW THROW
ELSE ELSE
@@ -190,7 +221,6 @@ DEFINE CLASS cl_FileName_Caps AS Custom
ENDIF ENDIF
FINALLY FINALLY
loFSO = NULL
tcFileName = lcFileName tcFileName = lcFileName
*-- Si existe FileName_Caps.LOG, lo actualiza *-- Si existe FileName_Caps.LOG, lo actualiza

View File

@@ -48,7 +48,11 @@ Else
Next Next
If GetBit(nDebug, 4) Then If GetBit(nDebug, 4) Then
MsgBox "End of Process!", 64, WScript.ScriptName If nExitCode = 0 Then
MsgBox "End of Process!", 64, WScript.ScriptName
Else
MsgBox "End of Process!", 48, WScript.ScriptName
End If
End If End If
End If End If
@@ -93,7 +97,7 @@ Private Sub evaluateFile( tcFile )
MsgBox cCMD, 0, "PARAMETERS" MsgBox cCMD, 0, "PARAMETERS"
Else Else
nRet = oVFP9.DoCmd( cCMD ) nRet = oVFP9.DoCmd( cCMD )
'nExitCode = oVFP9.Eval("_SCREEN.ExitCode") nExitCode = oVFP9.Eval("_SCREEN.ExitCodeFNC")
End If End If
End Sub End Sub

Binary file not shown.