Создание файла MFC не работает должным образом с pugixml

Я пытаюсь создать XML-файл, используя pugixml. Код есть;

//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.

Я заметил, что во время выполнения программы я не могу открыть вновь созданный файл, но когда программа закрыта, я могу открыть его.

Что может быть с этим?

Благодарю.

0

Решение

Вы создаете файл и оставляете его открытым для записи только с режимом общего доступа, равным нулю (то есть он не может использоваться совместно), и отбрасываете его дескриптор, а затем пытаетесь открыть файл для чтения с помощью синтаксического анализатора xml.

Вы, вероятно, хотите CloseHandle () на возвращаемое значение для :: CreateFile ()

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]