使用pugixml无法正常创建MFC文件

时间:2013-11-13 04:49:16

标签: c++ visual-c++ mfc pugixml

我正在尝试使用pugixml创建一个xml文件。代码是;

//Open the save as diolog
TCHAR szFilters[]= _T("Files (*.abc)|*.abc|All Files (*.*)|*.*||");

// Create an SaveAs dialog; the default file name extension is ".abc".
CFileDialog fileDlg(FALSE, _T("abc"), NULL,
    OFN_OVERWRITEPROMPT |OFN_CREATEPROMPT| OFN_PATHMUSTEXIST, szFilters);

// Display the file dialog. 
CString pathName;
CString fileName;
if(fileDlg.DoModal() == IDOK)
{
    pathName = fileDlg.GetPathName(); 
    fileName = fileDlg.GetFileName();

    ::CreateFile(pathName,GENERIC_WRITE,0,NULL,CREATE_NEW, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL);   
} //File is created in explorer
else
    return;

//[code_modify_add
// add node with some name
pugi::xml_document xmlDoc;
pugi::xml_parse_result result = xmlDoc.load_file(fileName);


问题是结果总是给出'file_not_found'状态,但我可以看到该文件是在Windows资源管理器中创建的。当我尝试在程序执行期间选择相同的文件时,它仍然返回'file_not_found'。
但是,如果我关闭程序并再次运行然后选择文件,则结果返回true。 我注意到程序执行时我无法打开新创建的文件,但程序关闭后我可以打开它。
它可能是什么问题?

感谢。

1 个答案:

答案 0 :(得分:1)

您正在创建一个文件并使其保持打开状态只能使用共享模式为零(意味着无法共享)并丢弃其句柄,然后尝试重新打开该文件以便使用xml解析器进行读取。

你可能想对:: CreateFile()

的返回值使用CloseHandle()
HANDLE hFile = ::CreateFile(pathName,GENERIC_WRITE,0,NULL,CREATE_NEW, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL); 

if (hFile == INVALID_HANDLE_VALUE) {
  // Call GetLastError() to figure out why the file creation failed.
}
else
{
  CloseHandle(hFile);
}