На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Не появляется сообщение о том, что файл уже существует при сохранении файла
Есть главный диалог IDD_LUNARMISSIONORBITS, которому соответствует класс CLunarMissionOrbits. На этой диалоге есть кнопка, при нажатии на которую появляется модальный диалог IDD_FLIGHTTOMOONDIALOG, которому соответствует класс CFlightToMoonDlg:

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



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

ExpandedWrap disabled
    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 сохраняется файл с новым именем, то сохранение происходит успешно. В случае же, когда сохраняется файл под уже существующим именем файла, то почему-то не выводится сообщение о том, что этот файл уже существует (с опцией перезаписать этот файл или отказаться от перезаписи) и программа приостанавливается.

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

А кто всё это должен делать ?
Узнай, существует ли файл.
Если он существует показывай предупреждающий диалог
с выбором вариантов действий.
Приблизительно так:
ExpandedWrap disabled
    // --------------------------------------------------------------------------
    BOOL WINAPI FileExist (const TCHAR *pName)                                                    
    {
     if(!pName) return FALSE;
     DWORD Attrs = ::GetFileAttributes(pName);
     
     if(Attrs == INVALID_FILE_ATTRIBUTES)      return FALSE;
     if((Attrs & FILE_ATTRIBUTE_DIRECTORY)!=0) return FALSE;
     
     return TRUE;
    }
    // --------------------------------------------------------------------------
    BOOL WINAPI DirExist (const TCHAR *pName)                                                    
    {
     if(!pName) return FALSE;
     DWORD Attrs = ::GetFileAttributes(pName);
     
     if(Attrs == INVALID_FILE_ATTRIBUTES)      return FALSE;
     if((Attrs & FILE_ATTRIBUTE_DIRECTORY)==0) return FALSE;
     
     return TRUE;
    }
    // --------------------------------------------------------------------------
Сообщение отредактировано: ЫукпШ -
erslgoeirjh
Лол ты серьёзно?
Ты же сам перед записью удаляешь файл если он существует:
ExpandedWrap disabled
        WIN32_FIND_DATA  FindFileData;
        HANDLE  hFind;
        hFind = FindFirstFile((LPCWSTR)sfilename,&FindFileData);
        if (hFind!=INVALID_HANDLE_VALUE)
        {
            DeleteFile(LPCWSTR)sfilename);
        }
        // действия по сохранению содержимого в файле;


Непонятно только зачем этот велосипед:
- если надо затереть - открой файл в режиме перезаписи он сам перетрётся
- если не надо - на существование проверяют обычно через GetFileAttributes(), а не то что ты написал
Цитата cppasm @
Лол ты серьёзно?
Ты же сам перед записью удаляешь файл если он существует

Copy+Past :lol:
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,1098 ]   [ 20 queries used ]   [ Generated: 4.03.21, 08:02 GMT ]