예제 #1
0
파일: common.cpp 프로젝트: AlexWMF/Carberp
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;
}
예제 #2
0
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;
}
예제 #3
0
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);
}