#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 = '' > >>