根据ini文件读取spb mdb文件信息

#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=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值