Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MFC文件创建无法使用pugixml正常工作_C++_Visual C++_Mfc_Pugixml - Fatal编程技术网

C++ MFC文件创建无法使用pugixml正常工作

C++ MFC文件创建无法使用pugixml正常工作,c++,visual-c++,mfc,pugixml,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_OVER

我正在尝试使用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);

问题是result始终显示“文件未找到”状态,但我可以看到该文件是在windows资源管理器中创建的。当我在程序执行期间尝试选择相同的文件时,它仍然返回“file\u not\u found”。
但是,如果我关闭程序并再次运行,然后选择该文件,结果将返回true。
我注意到,当程序执行时,我无法打开新创建的文件,但当程序关闭时,我可以打开它。
有什么问题吗?
谢谢。

您正在创建一个文件,并以零共享模式(即无法共享)将其保持为仅写打开状态,然后丢弃其句柄,然后尝试重新打开该文件以使用xml解析器读取

您可能希望在::CreateFile()的返回值上关闭handle()

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);
}