i use SHELLFILEOPERATION in HBFM to Copy/Move/Delete Files/Folder and it work fine
now i use same Code for "Backup" and it work with "some Files" but fail when have 30000
is there a Limit of SHELLFILEOPERATION
---
i got FullPathNameW from "Everything" and store it in Array
i pass Array to Function ShellFiles() which made a "large String" ( LIMIT
Code is from c:\MiniGUI\SOURCE\shell32\Shell32.prg
Code: Select all
FUNCTION ShellFiles( hWnd, acFiles, acTarget, nFunc, fFlag )
LOCAL cTemp
LOCAL cx
LOCAL lRet := .F.
LOCAL ccFiles, ccTarget
// Parent Window
IF EMPTY( hWnd )
hWnd := GetActiveWindow()
ENDIF
// Operation Flag
IF nFunc == NIL
nFunc := FO_DELETE
ENDIF
// Options Flag
IF fFlag == NIL
fFlag := FOF_ALLOWUNDO
ENDIF
// SourceFiles, convert Array to String
DEFAULT acFiles TO CHR( 0 )
IF VALTYPE( acFiles ) == "A"
cTemp := ""
FOR cx := 1 TO LEN( acFiles )
cTemp += acFiles[ cx ] + CHR( 0 )
NEXT
ccFiles := cTemp
ENDIF
ccFiles += CHR( 0 )
// TargetFiles, convert Array to String
DEFAULT acTarget TO CHR( 0 )
IF VALTYPE( acTarget ) == "A"
cTemp := ""
FOR cx := 1 TO LEN( acTarget )
cTemp += acTarget[ cx ] + CHR( 0 )
NEXT
ccTarget := cTemp
ENDIF
ccTarget += CHR( 0 )
// now call SHFileOperation
lRet := ShellFileOperation( hWnd, ccFiles, ccTarget, nFunc, fFlag )
RETURN lRet
Code: Select all
#pragma BEGINDUMP
#include <windows.h>
#include "hbapi.h"
HB_FUNC ( SHELLFILEOPERATION )
{
SHFILEOPSTRUCT sh;
sh.hwnd = (HWND) hb_parnl(1);
sh.pFrom = hb_parc(2);
sh.pTo = hb_parc(3);
sh.wFunc = hb_parnl(4);
sh.fFlags = hb_parnl(5);
sh.hNameMappings = 0;
sh.lpszProgressTitle = NULL;
hb_retnl( SHFileOperation (&sh) );
}
#pragma ENDDUMP