//保存项目 BOOL CUpdateBuilderDlg::SaveToXml(LPCTSTR pszFilePath) { ASSERT(pszFilePath!=NULL); if (pszFilePath == NULL) return FALSE; HRESULT hr = S_OK; MSXML2::IXMLDOMDocumentPtr pXmlDoc; MSXML2::IXMLDOMElementPtr pRoot, pFileList, pFileNode; _variant_t vFileName, vFileSize, vFileVersion, vMD5Key; try { hr = pXmlDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30)); if( FAILED( hr ) ) _com_issue_error(hr); pXmlDoc->PutpreserveWhiteSpace(VARIANT_TRUE); pXmlDoc->Putasync(VARIANT_FALSE); pXmlDoc->appendChild(pXmlDoc->createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'")); pRoot = pXmlDoc->createElement("manifest"); pRoot->setAttribute("version", "1.0"); pRoot->setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema"); pXmlDoc->appendChild(pRoot); pFileList = pXmlDoc->createElement("filelist"); pFileList->setAttribute("checksummode", "default"); for( int i = 0; i < m_FileListCtrl.GetItemCount(); i++ ) { vFileName = m_FileListCtrl.GetItemText(i, 0); vFILEVERSION 2,0,0,0 vMD5Key = m_FileListCtrl.GetItemText(i, 3); vFileSize = (ULONG)m_FileListCtrl.GetItemData(i); pFileNode = pXmlDoc->createElement("file"); pFileNode->setAttribute("filename", vFileName); pFileNode->setAttribute("filesize", vFileSize); pFileNode->setAttribute("fileversion", vFileVersion); pFileNode->setAttribute("md5", vMD5Key); pFileList->appendChild(pFileNode); } pRoot->appendChild(pFileList); hr = pXmlDoc->save(pszFilePath); if( FAILED( hr ) ) _com_issue_error(hr); return TRUE; } catch(_com_error& e) { CString strError; strError.Format(_T("Error code:%d\nError Message:%s\nError Description:%s"), (int)e.WCode(), e.ErrorMessage(), (char*)e.Description()); MessageBox(strError, _T("错误"),MB_OK|MB_ICONSTOP); } return FALSE; }