|
![]() |
#1 |
Участник
|
Большое спасибо AndyD.
Мне надо было получать все файлы из папки и подпапок по маске. переделал: X++: static container FindFiles(str Path,str Mask) { DLL _winApiDLL = new DLL('KERNEL32'); DLLFunction _findNextFile = new DLLFunction(_winApiDLL, 'FindNextFileA'); container res; #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) { 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 + "\\"); else if(subStr(fileName,strLen(fileName)-2,strLen(fileName))==Mask)res+=(_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); res=conNull(); findFilesOnDisk(Path); return res; } |
|
![]() |
#2 |
Гость
|
А не посконнее ли DirectoryInfo.GetFiles
https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx ? https://community.dynamics.com/ax/f/33/t/104585 ? Этот подход судя по классу DmfEntityBase используется как понимаю самим МС Последний раз редактировалось axm2013; 01.02.2016 в 17:07. |
|