亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? uclass.cpp

?? 讀取QQ IP數據庫(QQWry.dat)文件格式
?? CPP
字號:
//---------------------------------------------------------------------------


#pragma hdrstop

#include "uClass.h"
//---------------------------------------------------------------------------
// 實際信息字串存放位置的重定向模式
const REDIRECT_MODE_1 = 1;
const REDIRECT_MODE_2 = 2;
const char A_szSplitChar[] = "\r\n";
//---------------------------------------------------------------------------
// 構造一個TQQWry即QQIP地址數據庫的對象
// strWryFileName: QQIP數據庫文件的全名(包括路徑),請確認文件存在和可讀性
__fastcall TQQWry::TQQWry(String strWryFileName)
{
    FFileName = strWryFileName;
    FFileStream = new TFileStream(FFileName, fmOpenRead | fmShareDenyWrite, 0);
    FFileSize = FFileStream->Size;
    FFileStream->Seek(0, soFromBeginning);
    FFileStream->Read(&FFirstIPOffset, 4);
    FFileStream->Read(&FLastIPOffset, 4);
    FIPRecordCount = (FLastIPOffset - FFirstIPOffset) / 7 + 1;
}
//---------------------------------------------------------------------------
// 析構函數,釋放TQQWry對象,釋放文件數據流對象
__fastcall TQQWry::~TQQWry()
{
    delete FFileStream;
}
//---------------------------------------------------------------------------
//  獲取QQIP數據庫文件的全名(包括路徑)
String __fastcall TQQWry::GetWryFileName()
{
    return FFileName;
}
//---------------------------------------------------------------------------
// 獲取QQIP數據庫文件大小
DWORD __fastcall TQQWry::GetWryFileSize()
{
    return FFileSize;
}
//---------------------------------------------------------------------------
// 獲取QQIP數據庫內含有的IP地址信息記錄條數
DWORD __fastcall TQQWry::GetIPRecordCount()
{
    return FIPRecordCount;
}
//---------------------------------------------------------------------------
// 獲取當前QQIP數據庫的更新日期
String __fastcall TQQWry::GetUpdateDate()
{
    String strTemp = GetIPMsg(GetIPRecordCount());
    String strDate = strTemp.SubString(strTemp.LastDelimiter(A_szSplitChar) + 1, strTemp.Length());
    strDate = strDate.SubString(1, strDate.Pos("IP數據") - 1);
    return strDate;
}
//---------------------------------------------------------------------------
// 獲取當前QQIP數據庫的來源信息
String __fastcall TQQWry::GetDataFrom()
{
    String strTemp = GetIPMsg(GetIPRecordCount());
    strTemp = strTemp.SubString(strTemp.Pos(A_szSplitChar) + 2, strTemp.Length());
    strTemp = strTemp.SubString(strTemp.Pos(A_szSplitChar) + 2, strTemp.Length());
    strTemp = strTemp.SubString(1, strTemp.Pos(A_szSplitChar) - 1);
    return strTemp;
}
//---------------------------------------------------------------------------
// 給定一個文件偏移值,返回在數據文件中該偏移下的字符串,即讀取到0結尾的字符前
// dwStringOffset = 字符串在文件中的偏移值
String __fastcall TQQWry::ReadString(DWORD dwStringOffset)
{
    char cReadByte = 0;
    String strRet("");
    FFileStream->Seek(dwStringOffset, soFromBeginning);
    FFileStream->Read(&cReadByte, 1);
    while(cReadByte != 0)
    {
        strRet += String(cReadByte);
        FFileStream->Read(&cReadByte, 1);
    }
    return strRet;
}
//---------------------------------------------------------------------------
// 給定一個地區信息偏移值,返回在數據文件中該偏移量下的地區信息
// dwAreaOffset = 地區信息在文件中的偏移值
// 返回地區信息字符串
String __fastcall TQQWry::ReadArea(DWORD dwAreaOffset)
{
    BYTE btMode = 0;
    DWORD dwReadAreaOffset = 0;
    FFileStream->Seek(dwAreaOffset, soFromBeginning);
    FFileStream->Read(&btMode, 1);
    if(btMode == REDIRECT_MODE_1 || btMode == REDIRECT_MODE_2)
    {
        FFileStream->Read(&dwReadAreaOffset, 3);
        if(dwAreaOffset == 0)
            return "未知地區";
        else
            return ReadString(dwReadAreaOffset);
    }
    else
        return ReadString(dwAreaOffset);
}
//---------------------------------------------------------------------------
// 給定一個IP國家地區記錄的偏移,返回該IP地址的信息
// dwLocOffset = 國家記錄的偏移
// 返回IP地址信息(國家信息/地區信息)
String __fastcall TQQWry::GetIPLocation(DWORD dwLocOffset)
{
    BYTE btRedirectMode = 0;
    DWORD dwCountryFirstOffset = 0, dwCountrySecondOffset = 0;
    String strCountryMsg(""), strAreaMsg("");

    // 跳過4個字節,該4字節內容為該條IP信息里IP地址段中的終止IP值
    FFileStream->Seek(dwLocOffset + 4, soFromBeginning);
    // 讀取國家信息的重定向模式值
    FFileStream->Read(&btRedirectMode, 1);
    // 重定向模式1的處理
    if(btRedirectMode == REDIRECT_MODE_1)
    {
        //模式值為1,則后3個字節的內容為國家信息的重定向偏移值
        FFileStream->Read(&dwCountryFirstOffset, 3);
        // 進行重定向
        FFileStream->Seek(dwCountryFirstOffset, soFromBeginning);
        // 第二次讀取國家信息的重定向模式
        FFileStream->Read(&btRedirectMode, 1);
        // 第二次重定向模式為模式2的處理
        if(btRedirectMode == REDIRECT_MODE_2)
        {
            // 后3字節的內容即為第二次重定向偏移值
            FFileStream->Read(&dwCountrySecondOffset, 3);
            // 讀取第二次重定向偏移值下的字符串值,即為國家信息
            strCountryMsg = ReadString(dwCountrySecondOffset);
            // 若第一次重定向模式為1,進行重定向后讀取的第二次重定向模式為2,
            // 則地區信息存放在第一次國家信息偏移值的后面
            FFileStream->Seek(dwCountryFirstOffset + 4, soFromBeginning);
            // 第二次重定向模式不是模式2的處理
        }
        else
            strCountryMsg = ReadString(dwCountryFirstOffset);
        // 在重定向模式1下讀地區信息值
        strAreaMsg = ReadArea(FFileStream->Position);
    }
    // 重定向模式2的處理
    else if(btRedirectMode == REDIRECT_MODE_2)
    {
        FFileStream->Read(&dwCountrySecondOffset, 3);
        strCountryMsg = ReadString(dwCountrySecondOffset);
        strAreaMsg = ReadArea(dwLocOffset + 8);
    }
    // 不是重定向模式的處理,存放的即是IP地址信息
    else
    {
        strCountryMsg = ReadString(FFileStream->Position - 1);
        strAreaMsg = ReadArea(FFileStream->Position);
    }
    return strCountryMsg + A_szSplitChar + strAreaMsg;
}
//---------------------------------------------------------------------------
// 給定一個IP地址信息記錄號,返回該項記錄的信息
// dwIPRecordID = IP地址信息記錄號
// 返回記錄號信息, 含3個部分:①起始IP地址  ②終止IP地址  ③國家信息/地區信息
String __fastcall TQQWry::GetIPMsg(DWORD dwIPRecordID)
{
    if(dwIPRecordID == 0)
        dwIPRecordID = 1;
    if(dwIPRecordID > FIPRecordCount)
        return "記錄越界";
    BYTE A_btStartIP[4], A_btEndIP[4];
    memset(&A_btStartIP, 0x00 ,4);
    memset(&A_btEndIP, 0x00 ,4);
    String strStartIP(""), strEndIP("");
    DWORD dwEndIPOffset = 0;
    // 根據記錄ID號移到該記錄號的索引處
    FFileStream->Seek(FFirstIPOffset + (dwIPRecordID - 1) * 7, soFromBeginning);
    // 索引的前4個字節為起始IP地址
    FFileStream->Read(&A_btStartIP, 4);
    // 后3個字節是內容區域的偏移值
    FFileStream->Read(&dwEndIPOffset, 3);
    // 移至內容區域
    FFileStream->Seek(dwEndIPOffset, soFromBeginning);
    // 內容區域的前4個字節為終止IP地址
    FFileStream->Read(&A_btEndIP, 4);

    // 將起止IP地址轉換為點分的形式
    for(int i=3; i>-1; i--)
    {
        if(i != 0)
        {
            strStartIP += IntToStr(A_btStartIP[i]) + ".";
            strEndIP += IntToStr(A_btEndIP[i]) + ".";
        }
        else
        {
            strStartIP += IntToStr(A_btStartIP[i]);
            strEndIP += IntToStr(A_btEndIP[i]);
        }
    }
    return strStartIP + A_szSplitChar + strEndIP + A_szSplitChar + GetIPLocation(dwEndIPOffset);
    // 獲取該條記錄下的IP地址信息
    // 以下三者是統一的:
    // ①內容區域的偏移值  ②終止IP地址的存放位置 ③國家信息緊接在終止IP地址存放位置后
}
//---------------------------------------------------------------------------
//  給定一個IP地址(四段點分字符串形式),分解到TStrings中
void __fastcall SplitStringToStringList(String strSrc, String strSplitChar, TStringList *pList)
{
    while(strSrc.Pos(strSplitChar))
    {
        pList->Add(strSrc.SubString(1, strSrc.Pos(strSplitChar) - 1));
        strSrc = strSrc.SubString(strSrc.Pos(strSplitChar) + 1, strSrc.Length());
    }
    pList->Add(strSrc);
}
//---------------------------------------------------------------------------
DWORD __fastcall TQQWry::GetIPValue(String strIP)
{
    TStringList *pList = new TStringList;
    SplitStringToStringList(strIP, ".", pList);
    DWORD dwRet = 0;
    for(int i=3; i>-1; i--)
        dwRet += pList->Strings[i].ToInt() * (pow(256, 3-i));
    delete pList;
    return dwRet;
}
//---------------------------------------------------------------------------
// 給定一個IP地址(四段點分字符串形式),返回該IP地址所在的記錄號
DWORD __fastcall TQQWry::SearchIPRecordID(DWORD dwIPRecordFrom,
        DWORD dwIPRecordTo, DWORD dwIPValue)
{
    DWORD dwCompareIPValue1 = 0, dwCompareIPValue2 = 0;
    FFileStream->Seek(FFirstIPOffset + ((dwIPRecordTo - dwIPRecordFrom) / 2
            + dwIPRecordFrom - 1) * 7, soFromBeginning);
    FFileStream->Read(&dwCompareIPValue1, 4);
    FFileStream->Seek(FFirstIPOffset + ((dwIPRecordTo - dwIPRecordFrom) / 2
            + dwIPRecordFrom) * 7, soFromBeginning);
    FFileStream->Read(&dwCompareIPValue2, 4);
    // 找到了
    if(dwIPValue >= dwCompareIPValue1 && dwIPValue < dwCompareIPValue2)
        return (dwIPRecordTo - dwIPRecordFrom) / 2 + dwIPRecordFrom;
    else
    {
        // 后半段找
        if(dwIPValue > dwCompareIPValue1)
            return SearchIPRecordID((dwIPRecordTo - dwIPRecordFrom) / 2
                    + dwIPRecordFrom + 1, dwIPRecordTo, dwIPValue);
        // 前半段找
        else
        {
            if(dwIPValue < dwCompareIPValue1)
                return SearchIPRecordID(dwIPRecordFrom,
                        (dwIPRecordTo - dwIPRecordFrom) / 2
                        + dwIPRecordFrom - 1, dwIPValue);
        }
    }
    return 0;
}
//---------------------------------------------------------------------------
DWORD __fastcall TQQWry::GetIPRecordID(String strIP)
{
    if(strIP.Length() < 7 || strIP.Length() > 15)
        return 1;
    if(INADDR_NONE == inet_addr(strIP.c_str()))
        return 1;
    return SearchIPRecordID(1, GetIPRecordCount(), GetIPValue(strIP));
}

//---------------------------------------------------------------------------
bool CompactMDB(String strMdbFileName, String strPass1, String strPass2)
{
    bool bReturn;
    String strFileTemp = ChangeFileExt(strMdbFileName, ".Tmp");
    String strProvider1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
            strMdbFileName + ";Jet OLEDB:Database Password=" + strPass1;
    String strProvider2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
            strFileTemp + ";Jet OLEDB:Database Password=" + strPass2;

    Variant AdoObj;
    try
    {
        if(FileExists(strFileTemp))
            DeleteFile(strFileTemp);
        AdoObj = Variant::CreateObject("JRO.JetEngine");
        AdoObj.OleProcedure("CompactDatabase",
                WideString(strProvider1), WideString(strProvider2));
        if(FileExists(strMdbFileName))
            DeleteFile(strMdbFileName);
        RenameFile(strFileTemp,strMdbFileName);
        bReturn = true;
    }
    catch(...)
    {
        bReturn = false;
    }
    AdoObj.Clear();
    return bReturn;
}
#pragma package(smart_init)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品免费网站| 精品电影一区二区三区| 国产精品私房写真福利视频| 日本一区二区动态图| 国产精品资源在线| 国产色产综合色产在线视频| 国产精品一区二区视频| 久久久99精品久久| 国内精品视频一区二区三区八戒 | 欧美午夜精品久久久久久超碰| 久久午夜老司机| 黑人巨大精品欧美黑白配亚洲| 久久综合99re88久久爱| 日韩**一区毛片| 欧美一区二区视频免费观看| 日韩av一级电影| 欧美一卡在线观看| 午夜电影一区二区三区| 91精品国产欧美一区二区| 日韩中文字幕不卡| 精品国产一区二区三区不卡| 亚洲欧美日韩精品久久久久| 91网址在线看| 亚洲六月丁香色婷婷综合久久| 欧美日韩在线综合| 久久精工是国产品牌吗| 久久久久久久综合色一本| 成人av动漫在线| 亚洲高清视频在线| 色哦色哦哦色天天综合| 日韩中文字幕av电影| 2023国产一二三区日本精品2022| 懂色av噜噜一区二区三区av| 久久一二三国产| 91精品久久久久久蜜臀| 国产 欧美在线| 国产精品狼人久久影院观看方式| 免费人成精品欧美精品| 国产精品乱码久久久久久| 色综合久久久久综合| 日韩经典一区二区| 久久伊人中文字幕| 色综合久久中文综合久久97| 亚洲视频电影在线| 欧美草草影院在线视频| 国产自产高清不卡| 亚洲精选免费视频| 日韩女同互慰一区二区| a级高清视频欧美日韩| 一二三区精品视频| 日本一区二区免费在线| 欧美日韩中文另类| 成人午夜在线视频| 日本在线不卡视频| 1区2区3区精品视频| 欧美一级二级三级乱码| www.欧美精品一二区| 日本成人超碰在线观看| 国产精品久久久久久妇女6080| 7777精品伊人久久久大香线蕉超级流畅| 久久av老司机精品网站导航| 亚洲欧美韩国综合色| 2023国产精品| 99视频热这里只有精品免费| 麻豆精品国产传媒mv男同| 亚洲色图视频免费播放| 精品国产sm最大网站免费看| 韩国v欧美v亚洲v日本v| 亚洲电影一级黄| 一区二区中文视频| 久久精品夜色噜噜亚洲aⅴ| 99精品视频在线观看免费| 国产综合成人久久大片91| 亚洲国产精品久久久久秋霞影院| 国产精品美女一区二区在线观看| 日韩欧美第一区| 69p69国产精品| 欧美午夜精品久久久久久孕妇| www.色精品| 成人免费视频播放| 精品在线播放午夜| 青青草97国产精品免费观看| 亚洲欧美区自拍先锋| 中文字幕第一区综合| 国产视频在线观看一区二区三区| 精品日产卡一卡二卡麻豆| 精品国产成人在线影院| 国产无人区一区二区三区| 日本一区二区三区久久久久久久久不 | 国产精品美女www爽爽爽| 国产亚洲精久久久久久| 中文字幕成人在线观看| 亚洲欧美日韩国产中文在线| 亚洲一卡二卡三卡四卡无卡久久| 亚洲一区二区3| 美女性感视频久久| 国产传媒日韩欧美成人| 不卡在线观看av| 欧美日韩一二区| 日韩欧美国产午夜精品| 久久久久久久久蜜桃| 亚洲人午夜精品天堂一二香蕉| 亚洲综合激情网| 日韩av不卡一区二区| 国产成人免费视频网站高清观看视频 | 久久久www成人免费无遮挡大片| 久久九九99视频| 亚洲男帅同性gay1069| 三级久久三级久久久| 国产综合色产在线精品| 成a人片亚洲日本久久| 欧美老女人在线| 国产丝袜在线精品| 亚洲成人黄色影院| 精品一区二区三区的国产在线播放| 粗大黑人巨茎大战欧美成人| 在线亚洲一区观看| 精品日本一线二线三线不卡| 亚洲女性喷水在线观看一区| 亚洲福利视频一区| 国产福利精品一区| 欧美日韩国产片| 国产日韩欧美a| 蜜桃视频一区二区三区| 国产福利91精品一区二区三区| 欧美曰成人黄网| 国产片一区二区三区| 婷婷六月综合网| 成人精品在线视频观看| 4438亚洲最大| 亚洲美女屁股眼交| 韩日av一区二区| 欧洲激情一区二区| 中文字幕巨乱亚洲| 美女视频一区在线观看| 色成年激情久久综合| 精品国产成人系列| 奇米精品一区二区三区在线观看一| 成人激情电影免费在线观看| 日韩一区二区免费高清| 亚洲精品视频在线| 成人午夜视频网站| 精品三级在线观看| 丝袜诱惑制服诱惑色一区在线观看| 97se亚洲国产综合在线| 国产日韩欧美在线一区| 黄页视频在线91| 制服丝袜一区二区三区| 亚洲综合成人在线视频| 成人av综合在线| 国产精品婷婷午夜在线观看| 精品一区二区免费| 日韩美一区二区三区| 日韩精品色哟哟| 欧美日韩国产一级片| 亚瑟在线精品视频| 欧美亚洲禁片免费| 亚洲国产视频在线| 欧美中文字幕一区二区三区| 亚洲精品福利视频网站| 成人午夜免费av| 日本一区二区三级电影在线观看 | 99精品国产一区二区三区不卡| 久久嫩草精品久久久久| 黄色日韩三级电影| 2020国产精品| 国产福利精品导航| 欧美国产激情二区三区| 国产91丝袜在线播放九色| 久久久www成人免费无遮挡大片| 韩国av一区二区| 久久亚洲春色中文字幕久久久| 国精产品一区一区三区mba桃花 | 亚洲一区在线观看视频| 91国偷自产一区二区三区观看| 亚洲区小说区图片区qvod| 色中色一区二区| 一区二区三区欧美| 欧美群妇大交群中文字幕| 蜜臀av性久久久久蜜臀av麻豆| 精品少妇一区二区三区在线播放 | 91色婷婷久久久久合中文| 日韩一区在线看| 91在线播放网址| 一区二区三区精品视频| 欧美日韩国产高清一区二区三区| 亚洲精选视频免费看| 欧美美女激情18p| 日韩美女视频在线| 成人黄色软件下载| 一区二区三区高清在线| 在线中文字幕不卡| 奇米精品一区二区三区在线观看一| 成人h版在线观看| 夜夜揉揉日日人人青青一国产精品| 欧美精品日韩一本| 激情深爱一区二区| 亚洲同性同志一二三专区| 国产99精品在线观看| 亚洲精品va在线观看|