Перебор содержимого папки в 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'); }
Всего комментариев 3
Комментарии
-
Нашел лаконичный код для тех же целей, в предыдущем обнаружился баг — чтобы файлы нашлись нужно обязательно указывать расширение.
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 -
см. также System.IO.Directory.GetFiles()
Запись от gl00mie размещена 28.02.2012 в 20:47 -
Только при использовании нужно учесть, что данный при вызове при пакетных обработках вызывает ошибку
"сеанс попытался вызвать метод, который доступен только на клиенте."Запись от AlGol размещена 05.11.2013 в 17:30
Обновил(-а) AlGol 05.11.2013 в 19:08