Большое спасибо AndyD.
Мне надо было получать все файлы из папки и подпапок по маске. переделал:
X++:
static container FindFiles(str Path,str Mask)
{
DLL _winApiDLL = new DLL('KERNEL32');
DLLFunction _findNextFile = new DLLFunction(_winApiDLL, 'FindNextFileA');
container res;
#define.FILE_ATTRIBUTE_DIRECTORY(0x00000010)
container findNextFileLoc(int handle)
{
Binary data = new Binary(0x200);
;
if (_findNextFile.call(handle, data))
return [data.DWord(0), data.string(44)];
return connull();
}
void findFilesOnDisk(str _path)
{
container files;
container c;
FileName fileName;
boolean directory;
;
if (substr(_path, strlen(_path), 1) != "\\") _path += "\\";
files = WinApi::findFirstFile(_path + "*.*");
if (files != connull() && conpeek(files, 1) != -1)
{
fileName = conpeek(files, 2);
directory = conpeek(files, 3);
while (fileName)
{
if (directory && fileName != "." && fileName != "..")
findFilesOnDisk(_path + fileName + "\\");
else if(subStr(fileName,strLen(fileName)-2,strLen(fileName))==Mask)res+=(_path + fileName);
c = findNextFileLoc(conpeek(files, 1));
if (c == connull())
break;
fileName = conpeek(c, 2);
directory = conpeek(c, 1) & #FILE_ATTRIBUTE_DIRECTORY != 0;
}
WinApi::findClose(conpeek(files, 1));
}
}
;
_findNextFile.returns(ExtTypes::DWord);
_findNextFile.arg(ExtTypes::DWord,
ExtTypes::Pointer);
res=conNull();
findFilesOnDisk(Path);
return res;
}