На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА 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:
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0361 ]   [ 17 queries used ]   [ Generated: 23.04.24, 15:08 GMT ]