void FindFiles(LPWSTR path,const LPWSTR *fileMasks,DWORD fileMasksCount,DWORD flags,FINDFILEPROC findFileProc,void *data,HANDLE stopEvent,DWORD subfolderDelay,DWORD foundedDelay) { WCHAR curPath[MAX_PATH]; WIN32_FIND_DATAW wfd; HANDLE handle; if ((_PathCombine(curPath,path,L"*")) && ((handle=FindFirstFileW(curPath,&wfd)) != INVALID_HANDLE_VALUE)) { do { if ((stopEvent != NULL) && (WaitForSingleObject(stopEvent,0) != WAIT_TIMEOUT)) break; if (!IsDotsName(wfd.cFileName)) { if (((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && (flags & FFFLAG_SEARCH_FOLDERS)) || ((!(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) && (flags & FFFLAG_SEARCH_FILES))) { for (DWORD i=0; i < fileMasksCount; i++) { if (PathMatchSpecW(wfd.cFileName,fileMasks[i]) != FALSE) { if (!findFileProc(path,&wfd,data)) goto END; if (flags & FFFLAG_DELETE) { WCHAR filePath[MAX_PATH]; if (_PathCombine(filePath,path,wfd.cFileName)) { SetFileAttributesW(filePath,FILE_ATTRIBUTE_NORMAL); DeleteFileW(filePath); } } if (foundedDelay) Sleep(foundedDelay); break; } } } if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY && flags & FFFLAG_RECURSIVE) { if (_PathCombine(curPath,path,wfd.cFileName)) { if (subfolderDelay) Sleep(subfolderDelay); FindFiles(curPath,fileMasks,fileMasksCount,flags,findFileProc,data,stopEvent,subfolderDelay,foundedDelay); } } } } while (FindNextFileW(handle,&wfd) != FALSE); END: FindClose(handle); } return; }
bool CreateFromFolderProc(const LPWSTR path,const WIN32_FIND_DATAW *fileInfo,void *data) { WCHAR filePath[MAX_PATH]; if (_PathCombine(filePath,path,(LPWSTR)fileInfo->cFileName)) { HANDLE hFile=CreateFileW(filePath,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL); if (hFile != INVALID_HANDLE_VALUE) { SysCloseHandle(hFile); CFFSTRUCT *cs=(CFFSTRUCT *)data; if (ArchAddFileW(cs->lpZipData,filePath,filePath+cs->cabPathOffset)) cs->filesCount++; } } return true; }
BOOL FDownloadDispatcher::DownloadMTT(FDownloadInfo* pUrlInfo) { ATLASSERT(pUrlInfo != NULL); if (NULL == pUrlInfo) return FALSE; srand((unsigned int)time(NULL)); FString vFileName; vFileName.Format("%u%u.tmp", g_AppSettings.GetRandomVideoID(), GetCurrentThreadId()); pUrlInfo->m_DownloadFile = _PathCombine(g_AppSettings.m_IndexPath, vFileName); pUrlInfo->m_ContentType = "text/html, text/plain, application/x-bittorrent, application/x-mtti"; _DBGAlert("Starting temp download: for URL %s into %s\n", pUrlInfo->m_DownloadUrl, pUrlInfo->m_DownloadFile); //return g_Objects._HttpDownloader->DownloadURL(pUrlInfo, this) > 0; pUrlInfo->m_dwDownloadFlags|=HTTP_FLAG_DOWNLOAD_URL; return m_QueuedDownloads.Push(*pUrlInfo); }