How to using x++ code achieve Lookup files list with entire folder

How to using x++ code achieve Lookup files list with entire folder

Effect as below Image

 

Wrote by Jimmy xie at 2011-07-19      

Enjoying... ... (*^__^*) ... ...

/*
How to using x++ code achieve Lookup files list with entire folder
Wrote by Jimmy xie at 2011-07-19
*/
static void Jimmy_LookupFileFolder(Args _args)
{
FilePath initfilePath
= @"D:\工具";
FileName initFileName;
FileName initFullName;
int i,m;
int initHandle;
Dialog dlg
= new Dialog("");
DialogField dlgPath
= dlg.addField(typeid(filepath));

FileName fullFileName(FileName _path, FileName _fileName)
{
FileName _XpathName;
FileName _XfileName;
FileName _XfileExtension;
;
[_XpathName,_XfileName,_XfileExtension]
= fileNameSplit(_fileName);
return _XpathName + '\\' + _XfileName + _XfileExtension;
}
void findFiles(filepath filepath)
{
FileName Subfullname;
int SubHandle;
FileName SubFileName;

[SubHandle,SubFileName]
= WinAPI::findFirstFile(filepath + "\\*.*");

while (SubFileName != "")
{
Subfullname
= filepath + "\\" + SubFileName;
if (strlwr(SubFileName) != strlwr('.') &&
strlwr(SubFileName)
!= strlwr('..') &&
WinAPI::fileExists(Subfullname,TRUE)
)
{
if(winAPI::folderExists(Subfullname))
{
m
++;
setprefix(Subfullname);
findFiles(Subfullname);
}
else
{
i
++;
info(strfmt(
"%1 - %2",i,Subfullname));
}
}
SubFileName
= WinAPI::findNextFile(SubHandle);
}

WinAPI::findClose(SubHandle);
}
;
dlg.doInit();
dlgPath.value(initfilePath);
if(!dlg.run())
return;
initfilePath
= dlgPath.value();
if(!initfilePath)
throw error("Please selection the file path!");

[inithandle,initFileName]
= WinAPI::findFirstFile(initfilePath + "\\*.*");

setprefix(initfilePath);
while (initFileName != "")
{
initFullName
= initfilePath + "\\" + initFileName;
if (strlwr(initFileName) != strlwr('.') &&
strlwr(initFileName)
!= strlwr('..') &&
WinAPI::fileExists(initFullName,TRUE)
)
{
if(winAPI::folderExists(initFullName))
{
m
++;
setprefix(initFullName);
findFiles(initFullName);
}
else
{
i
++;
info(strfmt(
"%1 - %2",i,initFileName));
}
}
initFileName
= WinAPI::findNextFile(initHandle);//must be initHandle, otherwise Function 'FindNextFileW' in DLL library 'KERNEL32' has caused an exception.
}
WinAPI::findClose(inithandle);
info(strfmt(
"文件 : %1, 子文件夹 : %2",i,m));
}

原文地址:https://www.cnblogs.com/Fandyx/p/2110298.html