Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/39: Рейтинг темы: голосов - 39, средняя оценка - 4.54
Заблокирован

Помогите найти ошибку (Необработанное исключение типа "System.ArgumentException")

26.02.2012, 02:21. Показов 8140. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Пытаюсь сделать функцию, которая в mp3 файле находит tag: "TIT2" и выводит его в текстБокс1...

В чем ошибка, подскажите пожалуйста? Как сделать правильно?

Вот сама функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    private: System::Void tr_func (String ^ fName) {
                 if ( File::Exists( fName ) ) {
                     BinaryReader ^ bR1 = gcnew BinaryReader (File::Open (fName, FileMode::Open));
                     array <Char> ^ tit2 = gcnew array <Char> (4);
                     String ^ str;
                     try {
                         //Search of "TIT2"
                         int k = 0;
                         int endf;
                         {
                             endf = bR1 -> Read (tit2, k, 4);
                             str = Convert::ToString (tit2[0]) + Convert::ToString (tit2[1]) + Convert::ToString (tit2[2]) + Convert::ToString (tit2[3]);
                             textBox1 -> Text = str;
                             k = k + 4;
                        }
                        while ((str != "TIT2") || (endf != -1));
 
 
                     }
                     catch (EndOfStreamException^ e ) {}
                 }
                 }
Заранее спасибо!

P.S.: Нужно также позицию запомнить, с которой был найден тег...
Знаю функция не доделана, но интересует конкретно данный шаг
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.02.2012, 02:21
Ответы с готовыми решениями:

Необработанное исключение типа «System.ArgumentOutOfRangeException» произошло в mscorlib.dll
Необработанное исключение типа «System.ArgumentOutOfRangeException» произошло в mscorlib.dll Дополнительные сведения: minValue не может...

Ошибка: Необработанное исключение типа "System.IO.FileNotFoundException"
Добрый день. Пытаюсь в своем приложении использовать частично логику другого приложения. Приложение .NET. Программой рефлектор попал в...

Ошибка: Необработанное исключение типа "System.StackOverflowException"
начал разбираться с этим направлением. написал вот такой код int inmas; int onemas ; int...

36
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.02.2012, 19:57
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от IGPIGP Посмотреть сообщение
myFStream=FileStream (fName, FileMode::Open);//т
C++
1
myFStream=gcnew FileStream(fName, FileMode::Open);
//Блин...
1
Заблокирован
26.02.2012, 20:32  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
C++
1
myFStream=gcnew FileStream(fName, FileMode::Open);
//Блин...
Извините, но так я тоже пробовал уже

Добавлено через 6 минут
Может у меня перегрузка массива Char идет? Только я не знаю, как это исправить?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.02.2012, 20:50
Цитата Сообщение от GhostMan Посмотреть сообщение
Извините, но так я тоже пробовал уже
Вся штука в том, что вы не локализовали ошибку. Смысл в том, что бы разделить по-шагово и применить try - catch для выявления места возникновения ошибки и её кода. Вот, что я человек далёкий от медиа-форматов вообще и mp3 в частности должен думать видя System.ArgumentException? Вспоминать читанное мимолётом, что эти форматы берут начало от белой и синей книги, что они вообще говоря не вполне файлы, а скорее массивы данных, что они защищены авторскими правами?
Это гадание на кофейной гуще, т.к. я не специалист в media. Вы пытаетесь открыть этот mp3 - файл, как файл и я пытаюсь помочь.
Так давайте вместе посмотрим, открывается он или нет. Для этого найдем место возникновения, и может код ошибки уточнится.

Добавлено через 10 минут
Цитата Сообщение от GhostMan Посмотреть сообщение
while ((str != "TIT2") || (endf != -1));
Боитесь переполнения строки? Резонно. Напишите:
C++
1
while ((str != "TIT2") || (k< 512));
но сначала откройте поток и попробуйте прочесть хотя бы первую 4-ку. Я не мудрый советчик, но другого не видно. Попробуйте, всё таки сделать то, что я предлагаю. Место и код ошибки могут помочь сделать какие-то выводы.
0
Заблокирован
26.02.2012, 20:56  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Вся штука в том, что вы не локализовали ошибку. Смысл в том, что бы разделить по-шагово и применить try - catch для выявления места возникновения ошибки и её кода. Вот, что я человек далёкий от медиа-форматов вообще и mp3 в частности должен думать видя System.ArgumentException? Вспоминать читанное мимолётом, что эти форматы берут начало от белой и синей книги, что они вообще говоря не вполне файлы, а скорее массивы данных, что они защищены авторскими правами?
Это гадание на кофейной гуще, т.к. я не специалист в media. Вы пытаетесь открыть этот mp3 - файл, как файл и я пытаюсь помочь.
Так давайте вместе посмотрим, открывается он или нет. Для этого найдем место возникновения, и может код ошибки уточнится.

Добавлено через 10 минут

Боитесь переполнения строки? Резонно. Напишите:
C++
1
while ((str != "TIT2") || (k< 512));
но сначала откройте поток и попробуйте прочесть хотя бы первую 4-ку. Я не мудрый советчик, но другого не видно. Попробуйте, всё таки сделать то, что я предлагаю. Место и код ошибки могут помочь сделать какие-то выводы.
Хорошо, сейчас А насчет считывания, все работает, если цикл не использовать
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.02.2012, 21:02
Цитата Сообщение от GhostMan Посмотреть сообщение
А насчет считывания, все работает, если цикл не использовать
Это хороший признак, если так оно и есть. Остальное - гораздо проще.
Но тогда должна быть другая ошибка... В общем убедитесь что до цикла do-while
catch не выбрасывает сообщения.
1
Заблокирован
26.02.2012, 21:09  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Это хороший признак, если так оно и есть. Остальное - гораздо проще.
Но тогда должна быть другая ошибка... В общем убедитесь что до цикла do-while
catch не выбрасывает сообщения.
Вот функция без цикла, что Вы написали:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private: System::Void tr_func (String ^ fName) {
                          FileStream^ myFStream;// вот здесь конечно сначала объявить - мой ляп!
                          if ( File::Exists( fName ) ) {
                              try//начальное положение
                              {
                                  myFStream = gcnew FileStream (fName, FileMode::Open);//тут использовать - тип для объявления убрать
                                  BinaryReader ^ bR1 = gcnew BinaryReader (myFStream);
                                  array <Char> ^ tit2 = gcnew array <Char> (4);
                                  String ^ str;
                                  //Search of "TIT2"
                                  int k = 0;
                                  int endf;
                              }//это перемещаем если компилится, вниз на строку (до начала блока Catch)
                              catch (Exception^ e ) {
                                  MessageBox::Show(e->ToString());
                              }
                          }
                      }
Прошелся try...Все нормально работает, а с циклом беда
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.02.2012, 21:48
Объявите в начале
C++
1
array <unsigned char> ^ tit2 = gcnew array <unsigned char> (4);
ограничте объем чтения в строку
C++
1
while ((str != "TIT2") || (k<512));
1
Заблокирован
26.02.2012, 21:54  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Объявите в начале
C++
1
array <unsigned char> ^ tit2 = gcnew array <unsigned char> (4);
ограничте объем чтения в строку
C++
1
while ((str != "TIT2") || (k<512));
Объявил...без цикла работает
0
Заблокирован
26.02.2012, 21:57  [ТС]
Цитата Сообщение от GhostMan Посмотреть сообщение
Объявил...без цикла работает
С циклом те же ошибки правда в текстбокс вывелось "7368513"
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.02.2012, 22:34
объявите в начале ф-ции еще временный массив:
char chArr[4];

Цитата Сообщение от GhostMan Посмотреть сообщение
str = Convert::ToString (tit2[0]) + Convert::ToString (tit2[1]) + Convert::ToString (tit2[2]) + Convert::ToString (tit2[3]);
плохо
//имея unsigned char нужно конвертировать в char
C++
1
2
3
4
endf = bR1 -> Read (tit2, k, 4);
for(int i=0;i<0;i++) chArr[i]=(char)tit2[i];
 
str+ = gcnew String(chArr); //здесь накапливаем строчками по 4 символа.
Добавлено через 16 минут
это не верно...
Цитата Сообщение от IGPIGP Посмотреть сообщение
str+ = gcnew String(chArr); //здесь накапливаем строчками по 4 символа.
так лучше
str+ = Convert::ToString (tit2[0]) + Convert::ToString (tit2[1]) + Convert::ToString (tit2[2]) + Convert::ToString (tit2[3]);
Вообще, что-то не верно в принципе.
Можно читать порцию - обрабатывать - сохранять. Строка вещь ограниченная, не стоит читать в нее до конца файла. Ну то есть попробуйте прочесть до конца файла получить сообщение - конец файла достигнут (напишите Message::Box...), а все со строками закоментируйте. Потом решим, что дальше.
1
Заблокирован
26.02.2012, 22:38  [ТС]
Ошибка та же Текст в текстбоксе: "ИyzИ°°о<"
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.02.2012, 22:48
Цитата Сообщение от GhostMan Посмотреть сообщение
Ошибка та же Текст в текстбоксе: "ИyzИ°°о<"
А кто говорил, что символы будут отображаемыми?
0
Заблокирован
27.02.2012, 01:57  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
А кто говорил, что символы будут отображаемыми?
Желательно бы!
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
27.02.2012, 02:38
Цитата Сообщение от GhostMan Посмотреть сообщение
Желательно бы!
Для того, что бы ставить вопрос о декодировании или кодировании медиа потоков, стоит поучить основные типы данных
Это вообще. А в этом конкретном случае - не конвертируйте в строку char - конвертируйте char в int, а потом int.ToString() и будете видеть целочисленные значения соответствующие вашим символам.
1
Заблокирован
27.02.2012, 16:30  [ТС]
И тем не менее вопрос остался, как правильно организовать поиск по файлу teg-а "TIT2"?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
27.02.2012, 18:43
Цитата Сообщение от GhostMan Посмотреть сообщение
правильно организовать поиск по файлу teg-а
Нужно уяснить, что ищется и как организация места поиска может ускорить процесс. Если нет ничего готового.
Вы знаете, как выглядит цепочка, или какие ограничения накладываются на цепочки байт которые ищете?
1
Заблокирован
27.02.2012, 18:55  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Нужно уяснить, что ищется и как организация места поиска может ускорить процесс. Если нет ничего готового.
Вы знаете, как выглядит цепочка, или какие ограничения накладываются на цепочки байт которые ищете?
Нет, я первый раз пытаюсь работать с тегами, просто без тегов плеер смотрится не очень удобным
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.02.2012, 18:55

Необработанное исключение типа "System.InvalidOperationException"
Добрый день уважаемые форумчане! Нужна ваша помощь. Ошибка такова: попытка доступа к элементу управления не из того потока, в котором он...

Необработанное исключение типа "System.IndexOutOfRangeException"
Пишу программу которая находит все слова в переданном тексте которые заканчиваются на согласную. После запуска, при нажатии на кнопу...

Необработанное исключение типа "System.ArgumentException" в System.Windows.Forms.dll
Всем привет, пытаюсь сделать переход на форму по кнопке но вылазит следующее: С другими кнопками всё хорошо.

Необработанное исключение типа "System.ArgumentException" в System.Drawing.dll
Пишу приложение для работы с Графами (по учёбе). Есть Панель, в которой я рисую. Заполняю практически всю область белым квадратом. ...

Необработанное исключение типа "System.ArgumentException" в System.Drawing.dll
Доброго времени суток. Возникла проблема с загрузкой изображения из базы данных. Вот собственно код: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru