|
![]() |
#1 |
Участник
|
Угу.
Там в блоге есть пример поиска на диске. Только реализация проверки на вложенную папку замедляет поиск. 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"); }
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: gefr (1). |