>#DEFINE FOF_FILESONLY 0x0080 && on *.*, do only files >... > NumToDWORD(FOF_NOCONFIRMATION + FOF_NOCONFIRMMKDIR + FOF_FILESONLY) + ; > >>>Using examples demonstrated on this site, I have set up a simple data backup utility utilizing SHFileOperation to copy files and all subdirectories. This is working wonderfully.
>>dfromdir = ALLTRIM(backup.fromdir) >>IF RIGHT(fromdir,1) <> '\' >> dfromdir = dfromdir + '\' >>ENDIF >> >>dtodir = ALLTRIM(backup.todir) >>IF RIGHT(todir,1) <> '\' >> dtodir = dtodir + '\' >>ENDIF >> >>DECLARE INTEGER SHFileOperation IN SHELL32.DLL STRING @ LPSHFILEOPSTRUCT >>DECLARE INTEGER GetForegroundWindow IN WIN32API >>DECLARE INTEGER GetLastError IN WIN32API >>SET PROCEDURE TO CLSHEAP ADDITIVE >>oHeap = CREATEOBJ('Heap') >>#DEFINE FO_COPY 2 >>#DEFINE FOF_NOCONFIRMATION 0x10 && Don't prompt the user. >>#DEFINE FOF_NOCONFIRMMKDIR 0x200 && don't confirm making any needed dirs >> >>cSourceString = dfromdir+'*.*' + CHR(0) + CHR(0) >>cDestString = dtodir + CHR(0) + CHR(0) >> >>cProgressTitle = CHR(0) + CHR(0) >>nStringBase = oHeap.AllocBlob(cSourceString+cDestString+cProgressTitle) >>cFileOpStruct = NumToDWORD(GetForegroundWindow()) + ; >> NumToDWORD(FO_COPY) + ; >> NumToDWORD(nStringBase) + ; >> NumToDWORD(nStringBase + LEN(cSourceString)) + ; >> NumToDWORD(FOF_NOCONFIRMATION + FOF_NOCONFIRMMKDIR) + ; >> NumToDWORD(0) + ; >> NumToDWORD(0) + ; >> NumToDWORD(nStringBase + LEN(cSourceString)+LEN(cDestString)) >> >>nResult = SHFileOperation(@cFileOpStruct) = 0 >>IF nResult >> * It worked >> * Check for Aborts >> IF DWORDToNum(SUBST(cFileOpStruct,21,4)) = 0 >> * Something was aborted >> ENDIF >>ELSE >> * Op failed - report result >> =MESSAGEBOX('File Operation failed - ' + TRANSFORM(nResult,'@0')) >>ENDIF >>oHeap = '' >> >>>>