AXForum  
Вернуться   AXForum > Блоги > Kabardian
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

Оценить эту запись

Перебор содержимого папки в X++

Запись от Kabardian размещена 28.02.2012 в 12:08

Нашел замечательную статью, где описано как с помощью WinAPI из X++ перебрать содержимое папки.

X++:
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');
}
Размещено в Бложик
Просмотров 49074 Комментарии 3
Всего комментариев 3

Комментарии

  1. Старый комментарий
    Аватар для Kabardian
    Нашел лаконичный код для тех же целей, в предыдущем обнаружился баг — чтобы файлы нашлись нужно обязательно указывать расширение.

    X++:
     static void showFileName(Args _args)
      {
          int           handle;
          FilePath      filePath;
          FileName      FileName;
          ;
     
          filepath = "c:\\windows";
     
          [handle,filename] = 
           WinAPI::findFirstFile(filepath + "\\*.*");
     
          while (filename != "")
          {
              info(filepath + "\\" + filename);
              filename = WinAPI::findNextFile(handle);
          }
     
          WinAPI::findClose(handle);
      }
    Запись от Kabardian размещена 28.02.2012 в 12:33 Kabardian is offline
  2. Старый комментарий
    Запись от gl00mie размещена 28.02.2012 в 20:47 gl00mie is offline
  3. Старый комментарий
    Только при использовании нужно учесть, что данный при вызове при пакетных обработках вызывает ошибку
    "сеанс попытался вызвать метод, который доступен только на клиенте."
    Запись от AlGol размещена 05.11.2013 в 17:30 AlGol is offline
    Обновил(-а) AlGol 05.11.2013 в 19:08
 


Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:48.