Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Ошибка при открытии файла


Автор: Sayrus 11.9.2004, 01:39
Здрасти: подскажите плииз.......................................................................
Вобщем ошибка не при открытии медиа файла, а только если не один
файл не выбран, выскакивает вот такая ерунда-

Project Project1.exe raised exception class EMCIDeviceError with message 'Не удаетса отределитьтип
устройства по указанному расширению имени файла.'. Process Stopped. Use step or Run to continue.

Как устранть ошибку? Или отключить выскакивание этого сообщения..............





Автор: _hunter 11.9.2004, 11:13
отключить выскакивание очень просто -- поставь ручную обработку исключений и отключи останов на дельфийских исключениях

а для устранения ошибки нужно код показать ;)

Автор: Sayrus 12.9.2004, 00:50
Цитата(_hunter @ 11.9.2004, 11:13)
отключить выскакивание очень просто -- поставь ручную обработку исключений и отключи останов на дельфийских исключениях

а для устранения ошибки нужно код показать ;)

А по проще если можно про отключение и установку ручной обработки.
Код OpenDialoga вот, вобщем програмка простенький медиа плеер........


//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
if(OpenDialog1->Execute())
MediaPlayer1->FileName = OpenDialog1->FileName;
MediaPlayer1->Open();
StatusBar1->Panels->Items[0]->Text = OpenDialog1->FileName;
TrackBar1->Max = MediaPlayer1->Length;
}
//---------------------------------------------------------------------------


Заранее спасибо !..................

Автор: Атос 12.9.2004, 04:52
Цитата(Sayrus @ 12.9.2004, 00:50)
А по проще если можно про отключение и установку ручной обработки.


1) Почему бы не заключить в скобки код открытия файла и/или проверять на наличие выбранного файла?
2) Как я понимаю _hunter, он имел в виду пару try-catch

итак, вариант:

Код

void __fastcall TForm1::N2Click(TObject *Sender)
{
   if (OpenDialog1->Execute() && FileExists(OpenDialog1->FileName))
   { // первый пункт
       try // второй пункт
       {
           MediaPlayer1->FileName = OpenDialog1->FileName;
           MediaPlayer1->Open();
           StatusBar1->Panels->Items[0]->Text = OpenDialog1->FileName;
           TrackBar1->Max = MediaPlayer1->Length;
       }
       catch (EMCIDeviceError E) // второй пункт - ловим конкретно EMCIDeviceError
       {
           // можно вывести ругательства юзверю... или вообще игнорировать все
       }
   } // первый пункт
}

Автор: Sayrus 13.9.2004, 01:20
Цитата


1) Почему бы не заключить в скобки код открытия файла и/или проверять на наличие выбранного файла?
2) Как я понимаю _hunter, он имел в виду пару try-catch


Попробовал я,
На первый вариант ни какой реакции выдаёт туже ошибку.........
А вот второй при компиляции выдаёт:

[C++Error]Unit1.cpp(56): E2040 Declaration Terminated incorrectly

Чево я не так сделал?.....

Автор: srd 13.9.2004, 07:35
Ты бы сказал, что у тебя в строке 56 smile.gif
Попробуй
Код

catch (EMCIDeviceError *E)

или
Код

catch (EMCIDeviceError &E)

Насколько я помню Билдер, там VCL классы только в динамической памяти могут размещаться. А тут копирование объекта-исключения делалось

Автор: Sayrus 14.9.2004, 00:17
Цитата(srd @ 13.9.2004, 07:35)
Ты бы сказал, что у тебя в строке 56 smile.gif

Попробовал всё тоже самое не хочет компилить и всё....
Да Билдер пятый может в нём както подругому?.............. hmmm.gif

Автор: srd 14.9.2004, 02:24
Так какой код у тебя в 56-ой строке?

Автор: Конструктор 14.9.2004, 09:02
Попробуй без try-catch

Код

void __fastcall TForm1::N2Click(TObject *Sender)
{
   if (OpenDialog1->Execute())
   {
       MediaPlayer1->FileName = OpenDialog1->FileName;
       MediaPlayer1->Open();
       StatusBar1->Panels->Items[0]->Text = OpenDialog1->FileName;
       TrackBar1->Max = MediaPlayer1->Length;
  }
}


т.е. работать с файлом только если пользователь хоть что-то выбрал

Автор: Sayrus 15.9.2004, 03:20
Цитата
Попробуй без try-catch

Вот спасибо навел на правильную мысль, всего одной строки не хватало..............


void __fastcall TForm1::N2Click(TObject *Sender)
{
if(OpenDialog1->Execute())
{
MediaPlayer1->FileName = OpenDialog1->FileName;
MediaPlayer1->DeviceType = dtAutoSelect;----------вот этого не хватало !!!!! exclamation.gif
MediaPlayer1->Open();
StatusBar1->Panels->Items[0]->Text = OpenDialog1->FileName;
TrackBar1->Max = MediaPlayer1->Length;

}
}


Теперь всё работает exclamation.gif СПАСИБО ВСЕМ ЗА ПОМОЩЬ........................ biggrin.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)