Вот что получилось:
X++:
static boolean copyDir(str _sDirFrom, str _sDirTo, boolean _bAllIncluded = true, str _sFilter = '*.*')
{
str sSeekPath , sS;
container con;
int handl;
int iE;
FileName FileName;
;
if (!WinApi::folderExists( _sDirFrom ))
{
info (strfmt ('Директория %1 не существует', _sDirFrom));
return false;
}
//fileCreateAllDir(_sDirTo);
sSeekPath += _sDirFrom + '\\' + _sFilter;
[handl, FileName] = WinApi::findFirstFile( sSeekPath );
while (FileName)
{
if ( FileName == '.' || FileName == '..')
{
FileName = winapi::findNextFile(handl);
continue;
}
if(_bAllIncluded && WinApi::pathExists(_sDirFrom + '\\' + FileName ) ) // this is folder
{
Glob::copyDir(_sDirFrom + '\\' + FileName, _sDirTo + '\\' + FileName, _bAllIncluded, _sFilter); // call itself
}
iE = WinApi::copyFile( _sDirFrom + '\\' + FileName,
_sDirTo + '\\' + FileName);
// iE error processing if need
FileName= winapi::findNextFile(handl);
}
return false;
}