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));
}