Показать сообщение отдельно
Старый 28.10.2006, 16:40   #1  
Blog bot is offline
Blog bot
Участник
 
25,495 / 847 (79) +++++++
Регистрация: 28.10.2006
Dynamics AX Geek: Finding files with WinAPI
Источник: http://AxGeek.spaces.live.com/Blog/c...DB13!150.entry
==============
 Axapta’s WinAPI class has a bunch of static methods to handle files. The code example below shows how to utilize some of these methods to find files.
The two methods used to fetch all files matching the search criteria are findFirstFile() and findNextFile(). Don’t forget to clean up after yourself with findClose().
 
The code also uses three different find methods:
  • fileExists(_name) returns true, if _name is an existing file
  • folderExists(_name) returns true, if _name is an existing file or folder
  • pathExists(_name) returns true, if _name is an existing folder
The example uses the infolog for output. As with any infolog beware of performance and limitation to 10.000 lines.

 
static void FindFile(Args _args)
{
    #File
 
    FileName fullFileName(FileName _path, FileName _fileName)
    {
        FileName    pathName;
        FileName    fileName;
        FileName    fileExtension;
        ;
        [pathName,fileName,fileExtension] = fileNameSplit(_fileName);
 
        return _path + '\' + fileName + fileExtension;
    }
 
    void findFiles(FileName _path,
                   FileName _fileName,
                   boolean _inclSubDir = true,
                   FileName _prefix = fullFileName(_path,_fileName))
    {
        FileName    fileName;
        int         hdl;
        ;
 
        setprefix(_prefix);
 
        if (WinAPI::folderExists(_path))
        {
            [hdl,fileName] = WinApi::findFirstFile(fullFileName(_path,_fileName));
 
            while (fileName)
            {
                if (WinAPI::fileExists(fullFileName(_path,fileName)))
                    info(fileName);
 
                fileName = WinApi::findNextFile(hdl);
            }
 
            WinApi::findClose(hdl);
 
            if (_inclSubDir)
            {
                [hdl, fileName] = WinAPI::findFirstFile(_path+'\'+#AllFiles);
 
                while (fileName)
                {
                    if (strlwr(fileName) != strlwr(_fileName) &&
                        strlwr(fileName) != strlwr('.')       &&
                        strlwr(fileName) != strlwr('..')      &&
                        WinAPI::pathExists(fullFileName(_path,fileName)))
                        findFiles(fullFileName(_path,fileName), _fileName, _inclSubDir, fileName);
 
                    fileName = WinApi::findNextFile(hdl);
                }
 
                WinApi::findClose(hdl);
            }
        }
 
    }
 
    findFiles('c:\Program Files','*.doc');
}




==============
Источник: http://AxGeek.spaces.live.com/Blog/c...DB13!150.entry