#include <iostream>
#include <fstream>
#include <map>
#include <string>
#include <io.h>
#include <WINDOWS.H>
#include <iosfwd>
#include <vector>
#include <atlstr.h>
#include <icrsint.h> //Include support for VC++ Extensions
#import "C:/Program Files/Common Files/System/ADO/msado15.dll" no_namespace rename("EOF", "adoEOF")
using namespace std;
map<int, string> g_iniMap;
int g_iniID = 0;
fstream f;
int g_Name = 0;
struct iniCe
{
iniCe():text(_T("")), Db(_T("")){}
iniCe(CString str1, CString str2):text(str1), Db(str2){}
CString text;
CString Db;
};
class iniData
{
public:
iniData():RootNodeText(""){}
int getRootNum()
{
return m_vec.size();
}
bool insert(iniCe ce)
{
m_vec.push_back(ce);
return true;
}
iniCe getMem(int i)
{
return m_vec[i];
}
CString getRootNodeText()
{
return RootNodeText;
}
void setRootNodeText(CString str)
{
RootNodeText = str;
}
private:
CString RootNodeText;
vector<iniCe> m_vec;
};
vector<iniData> g_inisData;
//获得目录下的所有ini文件
void listFiles(const char * dir)
{
char dirNew[200];
strcpy(dirNew, dir);
strcat(dirNew, "\\*.*"); // 在目录后面加上"\\*.*"进行第一次搜索
intptr_t handle;
_finddata_t findData;
handle = _findfirst(dirNew, &findData);
if (handle == -1) // 检查是否成功
return;
do
{
if (findData.attrib & _A_SUBDIR)
{
if (strcmp(findData.name, ".") == 0 || strcmp(findData.name, "..") == 0)
continue;
// 在目录后面加上"\\"和搜索到的目录名进行下一次搜索
strcpy(dirNew, dir);
strcat(dirNew, "\\");
strcat(dirNew, findData.name);
listFiles(dirNew);
}
else
{
string str(findData.name);
size_t i = str.find_last_of(string("."));
if(i != string::npos && str.substr(i, str.size() - i) == ".ini")
{
string path = string(dir) + "\\" + findData.name;
/*f<<path<<endl;*/
g_iniMap.insert(make_pair(g_iniID++, path));
}
}
} while (_findnext(handle, &findData) == 0);
_findclose(handle); // 关闭搜索句柄
}
//获得ini文件的一些属性
static void getIniData(CString FilePath)
{
iniData data;
CString SName;
int nRoot;
GetPrivateProfileString(_T("Common"), _T("RootNodeText"), _T("DefaultName"), SName.GetBuffer(100), 100, FilePath);
data.setRootNodeText(SName);
GetPrivateProfileString(_T("Common"), _T("NodeCount"), _T("DefaultName"), SName.GetBuffer(100), 100, FilePath);
nRoot = _ttoi(SName);
for(int i=0; i<nRoot; i++)
{
CString rootNum(_T("RootNode"));
CString temp;
temp.Format(_T("%d"), i+1);
rootNum += temp;
iniCe ce;
GetPrivateProfileString(rootNum, _T("RootNodeText"), _T("DefaultName"), SName.GetBuffer(100), 100, FilePath);
ce.text = SName;
GetPrivateProfileString(rootNum, _T("RootNodeDB"), _T("DefaultName"), SName.GetBuffer(100), 100, FilePath);
ce.Db = SName;
data.insert(ce);
}
g_inisData.push_back(data);
}
void getMdb(string spbPath)
{
if(FAILED(CoInitialize(NULL)))
return;
_ConnectionPtr pMyConnect = NULL;
HRESULT hr=pMyConnect.CreateInstance(__uuidof(Connection));
if(FAILED(hr))
return;
if(pMyConnect->State) {
pMyConnect->Close();
pMyConnect= NULL;
}
try{
CString variant;
variant.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=%s;Persist Security Info=False;Jet OLEDB:Database Password=ZWCADMX"),CA2T(spbPath.c_str()) );
pMyConnect->Open((_bstr_t)variant/*"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=F:\\360MoveData\\Users\\Administrator\\Desktop\\spblib\\afastener.spb;Persist Security Info=False;Jet OLEDB:Database Password=ZWCADMX"*/,
"","",adModeUnknown);
}
catch (_com_error &e)
{
CString errormessage;
errormessage.Format(_T("连接数据库失败!\r\n错误信息:%s"),e.ErrorMessage());
f<< CT2A(errormessage)<<endl;
return;
}
//open the recordset:
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
try{
m_pRecordset->Open("SELECT * FROM ZWParts", pMyConnect.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
}
catch (_com_error &e)
{
CString errormessage;
errormessage.Format(_T("读取信息失败!\r\n错误信息:%s"),e.ErrorMessage());
f<< CT2A(errormessage)<<endl;
return;
}
string strName,strAge;
_variant_t var;
while(!m_pRecordset->adoEOF) {
strName=(string)(_bstr_t)m_pRecordset->Fields->GetItem("Name")->Value;
f<<" Name="<<strName<<endl;
m_pRecordset->MoveNext();
g_Name ++;
}
}
string getSpbPath(string path, string &spbName)
{
string str = path;
str += "/" + spbName;
return str;
}
int main()
{
setlocale(LC_ALL,"");
f.close();
f.open("F:/360MoveData/Users/Administrator/Desktop/1.txt",ios::out);
const char * path = "F:/360MoveData/Users/Administrator/Desktop/spblib";
listFiles(path);
//getIniData(_T("C:/Users/xulinlin/Desktop/spblib/afastener.ini"));
map<int, string>::iterator it;
for(it = g_iniMap.begin(); it!= g_iniMap.end(); it++)
{
CString temp = it->second.c_str();
getIniData(temp);
}
int num = 0;
for(int i = 0; i < g_inisData.size(); i++)
{
f<< g_iniMap.find(i)->second <<endl;
f<<" RootNodeText="<<CT2A(g_inisData[i].getRootNodeText())<<endl;
for(int j = 0; j< g_inisData[i].getRootNum(); j++)
{
f<<" RootNode"<<j + 1;
f<<" RootNodeText="<< CT2A(g_inisData[i].getMem(j).text) << " RootNodeDB="<< CT2A(g_inisData[i].getMem(j).Db)<<endl;
string spbPath = getSpbPath(path, (string)CT2A(g_inisData[i].getMem(j).Db));
getMdb(spbPath);
}
}
f<<"共有"<< g_Name<< "个元素"<<endl;
f.close();
//读取ini对应的表格数据信息
return 0;
}
[Common]
RootNodeText=滚珠丝杠
NodeCount=1
[RootNode1]
RootNodeText=滚珠丝杠
RootNodePath=
RootNodeDB=ballscrew.SPB
[QuickFindData]
PrptyName=代号
FindText=