Не появляется сообщение о том, что файл уже существует при сохранении файла
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 18.02.21 11:40
Оценка:
Есть главный диалог IDD_LUNARMISSIONORBITS, которому соответствует класс CLunarMissionOrbits. На этой диалоге есть кнопка, при нажатии на которую появляется модальный диалог IDD_FLIGHTTOMOONDIALOG, которому соответствует класс CFlightToMoonDlg:

void  CLunarMissionOrbits::OnBnClickedMfcbutton1()
{
    CFlightToMooonDlg  flightToMoonDlg(NULL);
    flightToMoonDlg.DoModal();
}


На диалоге CFlightToMoonDlg есть сборник вкладок m_IDC_TAB1. На одной из этих вкладок, указатель на которую называется pOrbitDetermination, также есть сборник вкладок m_IDC_TAB2. Этот сборник вкладок включает в себя вкладки pPage3 и pPage4. (Так задумана программа).
И на вкладке pPage3 при нажатии на одну из кнопок происходит запись информации в файл:

TCHAR  Buffer[MAX_PATH*4];
BOOL  dwRet = GetCurrentDirectory(MAX_PATH*4,Buffer);
CFileDialog  fileDialog(FALSE,0,L"\\Bin\\Orbit\\measures.IZM");
fileDialog.m_ofn.lpstrInitialDir = Buffer;
fdret = fileDialog.DoModal();
if (fdret==IDOK)
{
    CString  fileName = fileDIalog.GetPathNAme();
    CString  fileNameBrief = fileDialog.GetFileName();
    n = fileNasme.GetLength();
    LPCTSTR  pzFileName = fileName.GetBuffer();
    for (i=0; i<n; i++)  sfilename[i] = pzFileName[i];
    sfilename[n] = '\0';
    LPCTSTR  pzFileNameBrief = fileNameBrief.GetBuffer();
    for (i=0; i<n; i++)  sfilenamebrief[i] = pzFileNameBrief[i];
    sfilenamebrief[n] = '\0';
    fileName.ReleaseBuffer(0);
    fileNameBrief.ReleaseBuffer(0);
    WIN32_FIND_DATA  FindFileData;
    HANDLE  hFind;
    hFind = FindFirstFile((LPCWSTR)sfilename,&FindFileData);
    if (hFind!=INVALID_HANDLE_VALUE)
    {
        DeleteFile(LPCWSTR)sfilename);
    }
    // действия по сохранению содержимого в файле;
}


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

Как решить эту проблему--то есть как сделать так, чтобы при сохранении информации в файле с уже существующим именем выбрасывалось это сообщение?
1613 г. = 2024 г.
Re: Не появляется сообщение о том, что файл уже существует при сохранении файла
От: Nikita123 Россия  
Дата: 26.02.21 14:03
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Есть главный диалог IDD_LUNARMISSIONORBITS, которому соответствует класс CLunarMissionOrbits. На этой диалоге есть кнопка, при нажатии на которую появляется модальный диалог IDD_FLIGHTTOMOONDIALOG, которому соответствует класс CFlightToMoonDlg:


RF>
RF>void  CLunarMissionOrbits::OnBnClickedMfcbutton1()
RF>{
RF>    CFlightToMooonDlg  flightToMoonDlg(NULL);
RF>    flightToMoonDlg.DoModal();
RF>}
RF>


RF>На диалоге CFlightToMoonDlg есть сборник вкладок m_IDC_TAB1. На одной из этих вкладок, указатель на которую называется pOrbitDetermination, также есть сборник вкладок m_IDC_TAB2. Этот сборник вкладок включает в себя вкладки pPage3 и pPage4. (Так задумана программа).

RF>И на вкладке pPage3 при нажатии на одну из кнопок происходит запись информации в файл:

RF>[ccode]

RF>TCHAR Buffer[MAX_PATH*4];
RF>BOOL dwRet = GetCurrentDirectory(MAX_PATH*4,Buffer);
RF>CFileDialog fileDialog(FALSE,0,L"\\Bin\\Orbit\\measures.IZM");

RF>В случае, когда на вкладке pPage3 сохраняется файл с новым именем, то сохранение происходит успешно. В случае же, когда сохраняется файл под уже существующим именем файла, то почему-то не выводится сообщение о том, что этот файл уже существует (с опцией перезаписать этот файл или отказаться от перезаписи) и программа приостанавливается.


RF>Как решить эту проблему--то есть как сделать так, чтобы при сохранении информации в файле с уже существующим именем выбрасывалось это сообщение?

В конструкторе CFileDialog четвертый параметр должен быть (OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT)
Желаю успеха,
Никита.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.