⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 20090304.txt

📁    下载整个网站的源代码工具
💻 TXT
📖 第 1 页 / 共 3 页
字号:
       
    ::AfxBeginThread(CCodeProjectDlg::Download, this->GetSafeHwnd(), THREAD_PRIORITY_NORMAL, 0);   
}   
   
UINT CCodeProjectDlg::Download(LPVOID pParam)   
{   
    HWND hWnd = (HWND)pParam;   
   
    int i;   
    CString *pStr;   
    CInternetSession session("MyAgent", 1, INTERNET_OPEN_TYPE_PRECONFIG);   
   
    if (-1 == _taccess(m_strTargetDir + _T("global.css"), 0))   
        DownloadFile(session, CString(_T("http://www.codeproject.com/styles/global.css")), m_strTargetDir + _T("global.css"));   
   
    //K 下载具体内容    
    for (i = 0; i < m_aryDownloadItem.GetSize(); ++i)   
    {   
        pStr = new CString;   
        pStr->Format(_T("%s 开始下载!\n"), m_aryDownloadItemName[i]);   
        ::PostMessage(hWnd, WM_USER_DOWNSTATUS, (WPARAM)pStr, 0);   
           
        CString strTemp, strCurDir;   
        for(int j = 0; AfxExtractSubString(strTemp, m_aryDownloadItem[i], j, _T('/')); ++j)   
            strCurDir = strTemp;   
        ConfirmDir(m_strTargetDir + strCurDir + _T("\\\\"));   
   
        //K 下载分类索引的HTML文件    
        CString strItemGroup;   
        DownloadHtml(session, m_aryDownloadItem[i], strItemGroup);   
   
        //K 整理HTML文件的内容    
        CString strStart = _T("<!-- Main Page Contents Start -->"),   
                strEnd   = _T("<!-- Main Page Contents End -->");   
        long iPotion;   
        iPotion = strItemGroup.Find(strStart);   
        iPotion += strStart.GetLength();   
        strItemGroup.Delete(0, iPotion);   
        strStart = _T("</TABLE>");   
        iPotion = strItemGroup.Find(strStart);   
        iPotion += strStart.GetLength();   
        strItemGroup.Delete(0, iPotion);   
        iPotion = strItemGroup.Find(strEnd);   
        strItemGroup.Delete(iPotion, strItemGroup.GetLength() - iPotion);   
        CString strSperator = _T("</TABLE>");   
        strItemGroup.TrimRight();   
        strItemGroup = strItemGroup.Left(strItemGroup.GetLength() - strSperator.GetLength());   
        for (int k = -strSperator.GetLength(); -1 != k; )   
        {   
            iPotion = k;   
            k = strItemGroup.Find(strSperator, k + strSperator.GetLength());   
        }   
        strItemGroup = strItemGroup.Left(iPotion);   
        strEnd = _T("</TABLE><H2>Links</H2>");   
        iPotion = strItemGroup.Find(strEnd);   
        if (-1 != iPotion) strItemGroup.Delete(iPotion, strItemGroup.GetLength() - iPotion);   
           
        CArray<CSTRING, CString> aryItem;   
        ExtractItem(strItemGroup, CString(_T("<A CString -- Starts Article strStart='_T("<!--' 整理文章的内容 K strItemFile); aryItem[iItems], + www.codeproject.com?) _T(?http: DownloadHtml(session, } continue; _T(?.HTM?)); strCurFileName="strTemp;" strItemGroup.Replace(aryItem[iItems], { !="iHist)" (-1 if iHist="strHistory.Find(aryItem[iItems]);" int 4); - ++j) ?)); _T(? j, AfxExtractSubString(strTemp, j="0;" for(int strCurFileName; strTemp, strItemFileTemp; strItemFile; bItemComplete="true;" bool ++iItems) aryItem.GetSize(); < iItems="0;" (; for 下载文章 fileHist.SeekToEnd(); fileHist.ReadString(strHistory); CFile::typeText); | CFile::modeReadWrite CFile::modeNoTruncate CFile::modeCreate _T(?\\\\hist.txt?), strCurDir fileHist.Open(m_strTargetDir strHistory; fileHist; CStdioFile 历史记录文件 &aryItem); strCurDir, CString(_T(?.asp?)), href?)),>");   
            strEnd   = _T("<!-- Article Ends -->");   
            iPotion = strItemFile.Find(strStart, 0);   
            iPotion += strStart.GetLength();   
            strItemFile.Delete(0, iPotion);   
            iPotion = strItemFile.Find(strEnd);   
            strItemFile.Delete(iPotion, strItemFile.GetLength() - iPotion);   
   
            strItemFileTemp = strItemFile;   
            strItemFileTemp.MakeLower();   
   
            CArray<CSTRING, CString> aryItemSource;   
            CString strFileType;   
            ExtractItem(strItemFileTemp, CString(_T("<A CString K + _T(?http: } { (-1="=" if ++j) ?)); _T(? j, AfxExtractSubString(strTemp, j="0;" for(int strTemp, bItemComplete="bItemComplete" < for strCurDir, href?)), pStr- CString; pStr="new" 更新进度 strCurSourceFileName); _T(?\\\\?) strCurSourceDir="m_strTargetDir" strCurSourceUrl, ?)="=" strCurItemDir www.codeproject.com DownloadFile(session, && ConfirmDir(strCurSourceDir); strTemp; strTemp.Find(_T(?.?))) strTemp.MakeLower(); strCurSourceFileName="strTemp;" strCurSourceUrl.Replace(_T(?\\?), strCurSourceUrl="aryItemSource[l];" strCurDir; strCurSourceFileName; ++l) aryItemSource.GetSize(); l="0;" (int 下载文章中的资源 0, : 1 ? strTemp.Left(1)) (_T(? AfxExtractSubString(strCurItemDir, strTemp.Replace(_T(?\\?), strTemp="aryItem[iItems];" strCurItemDir; &aryItemSource); CString(_T(?.png?)), CString(_T(?src?)), ExtractItem(strItemFileTemp, CString(_T(?.bmp?)), CString(_T(?.gif?)), CString(_T(?.jpg?)), CString(_T(?.rar?)), CString(_T(?<a CString(_T(?.exe?)), CString(_T(?.zip?)),>Format(_T("    %s 下载完毕!\n"), strCurSourceFileName);   
                ::PostMessage(hWnd, WM_USER_DOWNSTATUS, (WPARAM)pStr, 0);   
   
            }//end for(l)    
               
            //K 保存文章    
            strItemFile = _T("<LINK href='\"../global.css\"' type=text/css rel='\"stylesheet\"'>\n") + strItemFile;   
            bItemComplete = bItemComplete && SaveStr2File(strItemFile, m_strTargetDir + strCurDir + _T("\\\\") + strCurFileName + _T(".HTM"));   
            //K 更新进度    
            pStr = new CString;   
            pStr->Format(_T("  %s.htm 下载完毕!\n"), strCurFileName);   
            ::PostMessage(hWnd, WM_USER_DOWNSTATUS, (WPARAM)pStr, 0);   
               
            fileHist.WriteString(aryItem[iItems]);   
            strItemGroup.Replace(aryItem[iItems], strCurFileName + _T(".HTM"));   
        }//end for(iItem)    
   
        //K 保存分类索引文件            
        strItemGroup = _T("<LINK href='\"../global.css\"' type=text/css rel='\"stylesheet\"'>\n") + strItemGroup;   
        SaveStr2File(strItemGroup, m_strTargetDir + strCurDir + _T("\\\\index.htm"));   
        //K 更新进度    
        pStr = new CString;   
        pStr->Format(_T("  index.htm 下载完毕!\n"));   
        ::PostMessage(hWnd, WM_USER_DOWNSTATUS, (WPARAM)pStr, 0);   
        pStr = new CString;   
        pStr->Format(_T("%s 下载完毕!\n"), m_aryDownloadItemName[i]);   
        ::PostMessage(hWnd, WM_USER_DOWNSTATUS, (WPARAM)pStr, 0);   
        pStr = new CString;   
        pStr->Format(_T("==================================================\n"));   
        ::PostMessage(hWnd, WM_USER_DOWNSTATUS, (WPARAM)pStr, 0);   
           
        fileHist.Close();   
   
    }//K end for(i)    
    ::PostMessage(hWnd, WM_USER_DOWNCOMPLETE, 0, 0);   
   
    return 0;   
}   
   
LRESULT CCodeProjectDlg::OnDownStatus(WPARAM wParam, LPARAM lParam)   
{   
    CString *pStr;   
    pStr = (CString *)wParam;   
       
    m_editStatus.SetSel(m_editStatus.GetWindowTextLength(), m_editStatus.GetWindowTextLength());   
    m_editStatus.ReplaceSel(*pStr);   
    delete pStr;   
    return 0;   
}   
   
LRESULT CCodeProjectDlg::OnDownComplete(WPARAM, LPARAM)   
{   
    AfxMessageBox(_T("下载完成!"));   
    m_bWorking = false;   
    m_btnOK.EnableWindow();   
   
    return 0;   
}   
   
void CCodeProjectDlg::OnStaticWeb()    
{   
    // TODO: Add your control notification handler code here    
       
    //if (!m_bWorking) m_btnOK.EnableWindow();    
    ShellExecute(NULL, _T("open"), _T("http://dalang.nease.net/fengnu.htm"), NULL, NULL, 2);   
    ShellExecute(NULL, _T("open"), _T("http://kjapan.sdedu.net/"), NULL, NULL, 2);   
}   
   
void CCodeProjectDlg::OnButton1()    
{   
    // TODO: Add your control notification handler code here    
    CDlgExplain dlg;   
    dlg.DoModal();   
}   
   
bool CCodeProjectDlg::ExtractItem(CString &strContant, CString &strStart, CString &strCondition, CString &strCurDir, void *pAry)   
{   
    CArray<CSTRING, CString> *pArray;   
    pArray = (CArray<CSTRING, CString> *)pAry;   
   
    CString strEnd, strNetDir = _T("http://www.codeproject.com/") + strCurDir + _T("/");   
    strNetDir.MakeLower();   
    int iStart = 0, iEnd = 0;   
    iStart = strContant.Find(strStart, iStart);   
    for (; -1 != iStart; iStart = strContant.Find(strStart, iStart + strStart.GetLength()))   
    {   
        bool bEnd = true;   
        for(int j = 0; bEnd; ++j)   
        {   
            strEnd = strContant.Mid(iStart + strStart.GetLength() + j, 1);   
            bEnd = (strEnd == _T(" ")) || (strEnd == _T("="));   
        }   
        if ((_T("\"") != strEnd) && (_T("'") != strEnd)) continue;   
   
        iEnd = strContant.Find(strEnd, iStart + strStart.GetLength() + j);   
        CString strTemp, strItem = strContant.Mid(iStart, iEnd - iStart);   
        strTemp = strItem;   
        strTemp.MakeLower();   
        if (strTemp.Right(strCondition.GetLength()) == strCondition)   
        {   
            strItem = strItem.Right(strItem.GetLength() - strStart.GetLength() - j);   
            strTemp = strItem.Left(strNetDir.GetLength());   
            strTemp.MakeLower();   
            if (_T("http://") == strTemp.Left(7))   
            {   
                if (strTemp.Left(strCurDir.GetLength()) == strCurDir)   
                {   
                    strItem = strItem.Right(strItem.GetLength() - strCurDir.GetLength());   
                    pArray->Add(strItem);   
                }   
            }   
            else   
            {   
                if (_T("ftp://") != strTemp.Left(6))   
                    pArray->Add(strItem);   
            }   
        }   
    }   
    return true;   
}   

// CodeProjectDlg.cpp : implementation file 
// 
 

 
#include "stdafx.h" 
#include "CodeProject.h" 
#include "CodeProjectDlg.h" 
#include "DlgExplain.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
#define WM_USER_DOWNSTATUS		(WM_USER + 101) 
#define WM_USER_DOWNCOMPLETE	(WM_USER + 102) 
 
///////////////////////////////////////////////////////////////////////////// 
// CCodeProjectDlg dialog 
bool DownloadHtml(CInternetSession &session, CString &strURL, CString &outStr) 
{ 
	//K 下载指定的网页到一个字符串中 
	CString sHeader = _T("Accept:*/*\r\n"); 
	DWORD dwFlags = INTERNET_FLAG_DONT_CACHE | 
					INTERNET_FLAG_TRANSFER_BINARY | 
					INTERNET_FLAG_EXISTING_CONNECT | 
					INTERNET_FLAG_RELOAD; 
	int nRead; 
	char buffer[1024]; 
	 
	try 
	{ 
		if(strURL.Left(7) != _T("http://")) strURL = _T("http://") + strURL; 
		CHttpFile *pHttpFile = (CHttpFile*)session.OpenURL(strURL, 1, dwFlags, sHeader, -1L); 
		if(pHttpFile) 
		{ 
			do 
			{ 
				nRead = pHttpFile->Read(buffer, 1023); 
				if(nRead != 0) 
				{ 
					buffer[nRead] = 0; 
					outStr += buffer; 
				} 
			} while (nRead != 0); 
			delete pHttpFile; 
 
		} 
		else 
		{ 
			AfxMessageBox(_T("建立连接失败:") + strURL); 
			return false; 
		} 
	} 
	catch (CInternetException *pEx) 
	{ 
		AfxMessageBox(_T("访问网址时出现异常:") + strURL); 
		pEx->Delete(); 
		return false; 
	} 
	return true; 
} 
 
bool ConfirmDir(CString &strDir) 
{ 
	//K 确认目录,如果不存在就创建它 
	if (-1 == _taccess(strDir, 0)) 
		if (!::CreateDirectory(strDir, NULL)) 
		{ 
			AfxMessageBox(_T("创建文件夹失败!") + strDir); 
			return false; 
		} 
	return true; 
} 
 
bool DownloadFile(CInternetSession &session, CString &strURL, CString &strFileName) 
{ 
	//K 下载指定的文件 
	CString sHeader = _T("Accept:*/*\r\n"); 
	DWORD dwFlags = INTERNET_FLAG_DONT_CACHE | 
					INTERNET_FLAG_TRANSFER_BINARY | 
					INTERNET_FLAG_EXISTING_CONNECT | 
					INTERNET_FLAG_RELOAD; 
	int nRead; 
	char buffer[1024]; 
	CHttpFile *pHttpFile = NULL; 
	CFile *pFile = NULL; 
 
	try 
	{ 
		if(strURL.Left(7) != _T("http://")) strURL = _T("http://") + strURL; 
		pHttpFile = (CHttpFile*)session.OpenURL(strURL, 1, dwFlags, sHeader, -1L); 
		if(pHttpFile) 
		{ 
			pFile = new CFile; 
			pFile->Open(strFileName, CFile::modeWrite | CFile::modeCreate); 
			do 
			{ 
				nRead = pHttpFile->Read(buffer, 1023); 
				if(nRead != 0) 
				{ 
					buffer[nRead] = 0; 
					pFile->Write(buffer, nRead); 
				} 
			} while (nRead != 0); 
			delete pHttpFile; 
			pFile->Close(); 
			delete pFile; 
		} 
		else 
		{ 
			AfxMessageBox(_T("建立连接失败:") + strURL); 
			return false; 
		} 
	} 
	catch (CInternetException *pEx) 
	{ 
		AfxMessageBox(_T("访问网址时出现异常:") + strURL); 
		pEx->Delete(); 
		if (NULL != pHttpFile) delete pHttpFile; 
		if (NULL != pFile) delete pFile; 
		return false; 
	} 
	catch (CFileException * pFEx) 
	{ 
		AfxMessageBox(_T("写文件时出现异常!") + strURL + _T("->") + strFileName); 
		pFEx->Delete(); 
		if (NULL != pHttpFile) delete pHttpFile; 
		if (NULL != pFile) delete pFile; 
		return false; 
	} 
	return true; 
} 
 
bool SaveStr2File(CString &inStr, CString &strFileName) 
{ 
	//K 将字符串中的内容保存为文件 
	CFile *pFile = new CFile; 
	pFile->Open(strFileName, CFile::modeWrite | CFile::modeCreate); 
	inStr.FreeExtra(); 
	long lStrLen = inStr.GetLength() * sizeof(TCHAR); 
	pFile->Write((void*)inStr.GetBuffer(lStrLen), lStrLen); 
	pFile->Close(); 
	delete pFile; 
	return true; 
} 
 
CString CCodeProjectDlg::m_strTargetDir; 
CArray CCodeProjectDlg::m_aryDownloadItem; 
CArray CCodeProjectDlg::m_aryDownloadItemName; 
 
CCodeProjectDlg::CCodeProjectDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CCodeProjectDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CCodeProjectDlg) 
		// NOTE: the ClassWizard will add member initialization here 
	//}}AFX_DATA_INIT 
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
} 
 
void CCodeProjectDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CCodeProjectDlg) 
	DDX_Control(pDX, IDOK, m_btnOK); 
	DDX_Control(pDX, IDC_EDIT1, m_editStatus); 
	DDX_Control(pDX, IDC_LIST, m_list); 
	DDX_Control(pDX, IDC_EDIT_TargetDir, m_editTargetDir); 
	//}}AFX_DATA_MAP 
} 
 
BEGIN_MESSAGE_MAP(CCodeProjectDlg, CDialog) 
	//{{AFX_MSG_MAP(CCodeProjectDlg) 
	ON_WM_PAINT() 
	ON_WM_QUERYDRAGICON() 
	ON_BN_CLICKED(IDC_STATIC_WEB, OnStaticWeb) 
	ON_MESSAGE(WM_USER_DOWNSTATUS, OnDownStatus) 
	ON_MESSAGE(WM_USER_DOWNCOMPLETE, OnDownComplete) 
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CCodeProjectDlg message handlers 
 
BOOL CCodeProjectDlg::OnInitDialog() 
{ 
	CDialog::OnInitDialog(); 
 
	// Set the icon for this dialog.  The framework does this automatically 
	//  when the application's main window is not a dialog 
	SetIcon(m_hIcon, TRUE);			// Set big icon 
	SetIcon(m_hIcon, FALSE);		// Set small icon 
	 
	// TODO: Add extra initialization here 
	CString strItem[] = { 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -