Index: src/ch/TSubTaskScanDirectory.cpp =================================================================== diff -u -N -re30c2b40bd1b533d8740edc88d80b2fb340f3466 -r1456ff2ae4a98c83f18d20dc253a24f26ddf521d --- src/ch/TSubTaskScanDirectory.cpp (.../TSubTaskScanDirectory.cpp) (revision e30c2b40bd1b533d8740edc88d80b2fb340f3466) +++ src/ch/TSubTaskScanDirectory.cpp (.../TSubTaskScanDirectory.cpp) (revision 1456ff2ae4a98c83f18d20dc253a24f26ddf521d) @@ -218,55 +218,37 @@ TTaskDefinition& rTaskDefinition = GetContext().GetTaskDefinition(); TWorkerThreadController& rThreadController = GetContext().GetThreadController(); - WIN32_FIND_DATA wfd; - chcore::TSmartPath pathCurrent; +// pathCurrent = pathDirName + chcore::PathFromString(_T("*")); + TLocalFilesystemFind finder = TLocalFilesystem::CreateFinder(pathDirName, chcore::PathFromString(_T("*"))); + CFileInfoPtr spFileInfo(boost::make_shared()); - pathCurrent = pathDirName + chcore::PathFromString(_T("*")); - - // Iterate through dirs & files - HANDLE hFind = FindFirstFile(pathCurrent.ToString(), &wfd); - if(hFind != INVALID_HANDLE_VALUE) + while(finder.FindNext(spFileInfo)) { - do + if(!spFileInfo->IsDirectory()) { - if(!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + if(afFilters.Match(spFileInfo)) { - CFileInfoPtr spFileInfo(boost::make_shared()); - - spFileInfo->Init(pathDirName + chcore::PathFromString(wfd.cFileName), stSrcIndex, &rTaskDefinition.GetSourcePaths(), - wfd.dwFileAttributes, (((ULONGLONG) wfd.nFileSizeHigh) << 32) + wfd.nFileSizeLow, wfd.ftCreationTime, - wfd.ftLastAccessTime, wfd.ftLastWriteTime, 0); - - if(afFilters.Match(spFileInfo)) - rFilesCache.AddFileInfo(spFileInfo); + spFileInfo->SetParentObject(stSrcIndex, &rTaskDefinition.GetSourcePaths()); + rFilesCache.AddFileInfo(spFileInfo); + spFileInfo = boost::make_shared(); } - else if(wfd.cFileName[0] != _T('.') || (wfd.cFileName[1] != _T('\0') && (wfd.cFileName[1] != _T('.') || wfd.cFileName[2] != _T('\0')))) + } + else + { + chcore::TSmartPath pathCurrent = spFileInfo->GetFullFilePath(); + if(bIncludeDirs) { - if(bIncludeDirs) - { - CFileInfoPtr spFileInfo(boost::make_shared()); - - // Add directory itself - spFileInfo->Init(pathDirName + chcore::PathFromString(wfd.cFileName), stSrcIndex, &rTaskDefinition.GetSourcePaths(), - wfd.dwFileAttributes, (((ULONGLONG) wfd.nFileSizeHigh) << 32) + wfd.nFileSizeLow, wfd.ftCreationTime, - wfd.ftLastAccessTime, wfd.ftLastWriteTime, 0); - - rFilesCache.AddFileInfo(spFileInfo); - } - if(bRecurse) - { - pathCurrent = pathDirName + chcore::PathFromString(wfd.cFileName) + chcore::PathFromString(_T("\\")); - // Recurse Dirs - ScanDirectory(pathCurrent, stSrcIndex, bRecurse, bIncludeDirs, afFilters); - } + spFileInfo->SetParentObject(stSrcIndex, &rTaskDefinition.GetSourcePaths()); + rFilesCache.AddFileInfo(spFileInfo); + spFileInfo = boost::make_shared(); } - if(rThreadController.KillRequested()) - break; + if(bRecurse) + ScanDirectory(pathCurrent, stSrcIndex, bRecurse, bIncludeDirs, afFilters); } - while(FindNextFile(hFind, &wfd)); - FindClose(hFind); + if(rThreadController.KillRequested()) + break; } return 0;