65.9K
CodeProject 正在变化。 阅读更多。
Home

将 Web 浏览器收藏夹导出到 XML 文件

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.67/5 (2投票s)

2010 年 4 月 7 日

CPOL
viewsIcon

20128

downloadIcon

266

本文提供了一种导出网页浏览器收藏的方法。

demo src

引言

本文将向您展示一种简单的导出网页浏览器收藏的方法。正如我们所知,网页浏览器的导入和导出收藏功能已被删除。因此,我们必须自行实现。

关于代码

如果您想导出收藏,您必须知道它们存储的位置。它们可以在注册表中找到的 *.URL 目录中找到。之后,读取所有项目并获取名称和 URL。问题是如何获取 *.url 文件的 URL?实际上,这很简单。“*.url”文件与“*.ini”文件类似。因此,您可以像操作 INI 文件一样操作它们。请查看以下内容

[DEFAULT]
BASEURL=http://faq.csdn.net/read/196943.html
[InternetShortcut]
URL=http://faq.csdn.net/read/196943.html Modified=D09A951BEAD2CA01A1

打开 *.url 文件,您会找到以下片段。

void CExportDlg::OnExport() 
{
	// TODO: Add your control notification handler code here

	CString strFilePath,favpath;

	// Get the location of favorites.
	HKEY hKEY;
	DWORD type=REG_SZ;
	LPCTSTR path=
	    "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
	DWORD cbData=80;
	TCHAR buf[512];

	::RegOpenKeyEx(HKEY_CURRENT_USER,path,0,KEY_READ,&hKEY);
	::RegQueryValueEx(hKEY,"Favorites",NULL,&type,(LPBYTE)buf,&cbData);
	::RegCloseKey(hKEY);
	favpath.Format ("%s",buf);
	favpath+="\\*.url";

	GetDlgItem(IDC_EDIT1)->GetWindowText (strFilePath.GetBuffer (256),256);

	BOOL bWorking;
	CFileFind ffd;
	bWorking=ffd.FindFile (favpath);
	CString strUrl;

	if(strFilePath!="")
	{
		CMarkup xml;

		xml.AddElem ("main");
		xml.AddAttrib ("version","2"); 
	         LPSTR url=new char[512];

		while(bWorking)
		{
			bWorking=ffd.FindNextFile ();
			if(!ffd.IsDots()&&!ffd.IsDirectory ())
			{
				GetPrivateProfileString("InternetShortcut",
					"URL",NULL,url,512,ffd.GetFilePath ());

				xml.AddChildElem ("ITEM",url);
				xml.IntoElem(); 

			    xml.AddAttrib ("IsFolder","0");

				CString AttribName;
				AttribName=ffd.GetFileName();
				xml.AddAttrib ("name",AttribName.Left 
					(AttribName.GetLength ()-4));
				xml.OutOfElem ();
			}
		}
		delete [] url;

		CString csXML=xml.GetDoc ();
		CString xmlfile;
		xmlfile=" ";
		xmlfile+=csXML;	
		CFile file(strFilePath,CFile::modeWrite|CFile::modeCreate );
		file.WriteHuge (xmlfile.GetBuffer (5000),xmlfile.GetLength ());
		if(IDOK==AfxMessageBox("Export finished!"))
			this->PostMessage (WM_CLOSE,0,0);
	}
}

CMarkup 是我在 CodeProject 上找到的一个类... 我非常感谢作者。希望对您有所帮助。

历史

  • 2010 年 3 月 7 日:初始发布
© . All rights reserved.