На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Ошибки IO не ловятся исключениями
    Вопрос по использованию try - catch(...)
    У меня есть такой пример, записываю и читаю с файла:
    ExpandedWrap disabled
      void DataWrite()
      {
          int i, j;
          FILE *f;
          f = fopen(e::filename, "wb");
          fwrite(&e::elementubound, sizeof(e::elementubound), 1, f);
          for (i=0; i<e::elementubound; i++)
          {
              fwrite(&e::element[i].param, sizeof(e::element[i].param), 1, f);
              fwrite(&e::element[i].value, sizeof(e::element[i].value), 1, f);
          }
          fflush(f);
          fclose(f);
      }
       
      void DataRead()
      {
          int i, j;
          FILE *f;
          f = fopen(e::filename, "rb");
          fread(&e::elementubound, sizeof(e::elementubound), 1, f);
          for (i=0; i<e::elementubound; i++)
          {
              fread(&e::element[i].param, sizeof(e::element[i].param), 1, f);
              fread(&e::element[i].value, sizeof(e::element[i].value), 1, f);
          }
          fclose(f);
      }

    Если я своей программой записываю и потом считываю - никаких проблем.
    Проблемы появляются тогда, когда происходит открытие файла с совпадающим расширением. т.е. программа выходит за пределы отведенной ей памяти.
    Попробовал использовать try - catch(...)

    Добавлено
    ExpandedWrap disabled
      void DataReadNew()
      {
          int i, j;
          FILE *f;
          try
          {
              f = fopen(e::filename, "rb");
              fread(&e::elementubound, sizeof(e::elementubound), 1, f);
              for (i=0; i<e::elementubound; i++)
              {
                  fread(&e::element[i].param, sizeof(e::element[i].param), 1, f);
                  fread(&e::element[i].value, sizeof(e::element[i].value), 1, f);
              }
              fclose(f);
          }
          catch(...)
          {
              MessageBox(e::formhwnd, "Error file open - File format not valid", " Message", MB_OK);
          }
      }


    Добавлено
    и вместо сообщения "Error file open - File format not valid" получаю зависание программы, что не так ?

    Эта тема была разделена из темы ""обработка исключений" vs "обработка кодов возврата""
    Сообщение отредактировано: H g -
      Так при чтении просто смотрите на количество прочитанных байт из файла, что вам fread возвращает
        try - catch(...) в моем понимании для того, чтобы отлавливать исключительные ситуации, попытка читать из файла за его пределами или писать за пределы - на мой взгляд и есть исключительная ситуация.
        Сообщение отредактировано: H g -
          Цитата H g @
          try - catch(...) в моем понимании для того, чтобы отлавливать исключительные ситуации, попытка читать из файла за его пределами или писать за пределы - на мой взгляд и есть исключительная ситуация.

          Но не на взгляд API, которое вы используете :)

          Это вообще API из Си, в котором нет исключительных ситуаций.
            Цитата H g @
            или писать за пределы

            А так вообще бывает? На диске место может закончится -- слышал. Про квоты слышал. А про писать за пределы файла -- что-то новое.

            Добавлено
            И вообще. Прежде стоит изучить работу функций, которыми пользуетесь, а потом писать код. Попытка ловить исключения, которых не будет -- не сработает. А вот прочитав про возвращаемые значения сразу можно понять суть работы и сигнализацию об ошибках.
              macomics, D_KEY теперь понятно )) спасибо за ответы
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0243 ]   [ 15 queries used ]   [ Generated: 16.06.25, 11:35 GMT ]