Показать сообщение отдельно
Старый 09.10.2008, 17:58   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Угу.
Там в блоге есть пример поиска на диске.
Только реализация проверки на вложенную папку замедляет поиск.
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).