Угу.
Там в блоге есть пример поиска на диске.
Только реализация проверки на вложенную папку замедляет поиск.
X++:
static void FindFilesOnDisk(Args _args)
{
DLL _winApiDLL = new DLL('KERNEL32');
DLLFunction _findNextFile = new DLLFunction(_winApiDLL, 'FindNextFileA');
#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, FileName _fileName)
{
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 + "\\", _fileName);
else if (fileName == _fileName)
info(_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);
findFilesOnDisk("c:\\", "hosts");
}