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

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

26.02.2012, 02:21. Показов 7802. Ответов 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
36 / 36 / 0
Регистрация: 24.05.2009
Сообщений: 178
26.02.2012, 09:30
А что именно не получается то? Вы уверены, что начало тега находится на позиции кратной 4?
1
Заблокирован
26.02.2012, 13:32  [ТС]
Цитата Сообщение от DartLenin Посмотреть сообщение
А что именно не получается то? Вы уверены, что начало тега находится на позиции кратной 4?
Это же посимвольное чтение идет 4 символа = 4 шагам...Естественно уверен
Оно вылетает с ошибкой при запуске, как ошибку исправить?

Да, там оператор do отсутствовал, вот исправленная:
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;
                                                 do {
                                                         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 ) {}
                                 }
                                 }
Вопрос остался тот же...
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.02.2012, 13:54
А что если поднять try сюда:
Цитата Сообщение от GhostMan Посмотреть сообщение
r_func (String ^ fName) {
C++
1
2
3
4
5
6
r_func (String ^ fName) {
try{
//а в кэтч написать:
Catch (Exception^ e ){
MessageBox::Show(e->ToString());
}
Тогда Вы сможете, добавить определенности в ситуацию.
1
36 / 36 / 0
Регистрация: 24.05.2009
Сообщений: 178
26.02.2012, 14:06
Ну а какая ошибка то? На какой строке?
1
Заблокирован
26.02.2012, 14:12  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
А что если поднять try сюда:

C++
1
2
3
4
5
6
r_func (String ^ fName) {
try{
//а в кэтч написать:
Catch (Exception^ e ){
MessageBox::Show(e->ToString());
}
Тогда Вы сможете, добавить определенности в ситуацию.
Вот получившийся код, который тоже не работает :
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) {
                 try {
                     if ( File::Exists( fName ) ) {
                         BinaryReader ^ bR1 = gcnew BinaryReader (File::Open (fName, FileMode::Open));
                         array <Char> ^ tit2 = gcnew array <Char> (4);
                         String ^ str;
                     
                         //Search of "TIT2"
                         int k = 0;
                         int endf;
                         while ((endf != -1) || (str != "TIT2"))  {
                             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;
                        }
                     }
                 }
                 catch (EndOfStreamException^ e ) {
                     MessageBox::Show(e->ToString());
                 }
             }
Добавлено через 1 минуту
Цитата Сообщение от DartLenin Посмотреть сообщение
Ну а какая ошибка то? На какой строке?
В цикле на втором и последующих шагах...Думаю дело в типе Char, но как исправить не знаю
0
36 / 36 / 0
Регистрация: 24.05.2009
Сообщений: 178
26.02.2012, 14:19
Там где вы склеиваете строку? Текст ошибки? Номер?
1
Заблокирован
26.02.2012, 14:22  [ТС]
Цитата Сообщение от DartLenin Посмотреть сообщение
Там где вы склеиваете строку? Текст ошибки? Номер?
Вот текст ошибки:
Необработанное исключение типа "System.ArgumentException" произошло в mscorlib.dll

Дополнительные сведения: Смещение и длина вышли за границы массива или значение счетчика превышает количество элементов от указателя до конца исходной коллекции.
Строка склеивается корректно, вроде...
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.02.2012, 14:33
Цитата Сообщение от GhostMan Посмотреть сообщение
str = Convert::ToString (tit2[0]) + Convert::ToString (tit2[1]) + Convert::ToString (tit2[2]) + Convert::ToString (tit2[3]);
Лучше бы сначала получить строчку:
C++
1
String^ mySfrChAr=String(tit2[2]);
Цитата Сообщение от GhostMan Посмотреть сообщение
В цикле на втором и последующих шагах
Покажите что сказал компилятор, - дословно, а если молчит, - перенесите try отловите в Catch и выведите на экран, как предложено, please

Добавлено через 6 минут
Цитата Сообщение от GhostMan Посмотреть сообщение
BinaryReader ^ bR1 = gcnew BinaryReader (File::Open (fName, FileMode::Open));
Я тут ни в чём не уверен, но объект Stream^ myM3stream я бы создал отдельно, и проверил создается ли такой поток. Есть ли разрешение, не занят ли и т.п.
1
Заблокирован
26.02.2012, 14:34  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Лучше бы сначала получить строчку:
String^ mySfrChAr=String(tit2[2]);


Покажите что сказал компилятор, - дословно, а если молчит, - перенесите try отловите в Catch и выведите на экран, как предложено, please

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

Я тут ни в чём не уверен, но объект Stream^ myM3stream я бы создал отдельно, и проверил создается ли такой поток. Есть ли разрешение, не занят ли и т.п.
Компилятор выдает следующее:
C++
1
2
3
4
5
6
7
8
9
10
"TagReader.exe" (Управляемый (v4.0.30319)): Загружен "C:\windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll"
"TagReader.exe" (Управляемый (v4.0.30319)): Загружен "C:\Users\Связной\Desktop\TagReader\Debug\TagReader.exe", Cимволы загружены.
"TagReader.exe" (Управляемый (v4.0.30319)): Загружен "C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll"
"TagReader.exe" (Управляемый (v4.0.30319)): Загружен "C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll"
"TagReader.exe" (Управляемый (v4.0.30319)): Загружен "C:\windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll"
"TagReader.exe" (Управляемый (v4.0.30319)): Загружен "C:\windows\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_ru_b77a5c561934e089\mscorlib.resources.dll"
Первый этап обработки исключения типа "System.ArgumentException" в приложении mscorlib.dll
Необработанное исключение типа "System.ArgumentException" произошло в mscorlib.dll
 
Дополнительные сведения: Смещение и длина вышли за границы массива или значение счетчика превышает количество элементов от указателя до конца исходной коллекции.
Извините, у меня плохо получается отлавливать ошибки в программе, поэтому и обратился на форум
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.02.2012, 14:43
Цитата Сообщение от GhostMan Посмотреть сообщение
System.ArgumentException
Вот. Теперь нужно раскопать откудова он такой упёртый? Обычно это обращение к тому чего нет или попытка поставить куда нить, то чего там не ждут.
Совет:
Проверьте создается ли поток. Для этого создайте его отдельно (не в скобках как переданный аргумент)
Оператором try (блока) начните тело Вашей функции, а нижнюю скобку перемещайте вниз на одну строку, за один успешный ход компиляции.
1
36 / 36 / 0
Регистрация: 24.05.2009
Сообщений: 178
26.02.2012, 14:52
Что-то я не понял, если строка склеивается корректно, то как, одновременно с этим, может произойти ошибка во время склеивания строк? На какой все такие строке ошибка? Напишите саму строку.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.02.2012, 15:10
Обратите внимание на создание потока
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
private: System::Void tr_func (String ^ fName) {
if ( File::Exists( fName ) ) {
try//начальное положение
{
FileStream^ myFStream=FileStream (fName, FileMode::Open);
}//это перемещаем если компилится, вниз на строку (до начала блока do)
 
 BinaryReader ^ bR1 = gcnew BinaryReader (myFStream);
 
array <Char> ^ tit2 = gcnew array <Char> (4);
String ^ str;
 
//Search of "TIT2"
int k = 0;
int endf;
do {
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 (Exception^ e ) {
MessageBox::Show(e->ToString());
}
}
}
1
Заблокирован
26.02.2012, 15:20  [ТС]
Спасибо за помощь всем! Сейчас сделаю, отпишусь, где выдаст ошибку...
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.02.2012, 15:36
Цитата Сообщение от IGPIGP Посмотреть сообщение
catch (Exception^ e ) {
Извините, луше вначале так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private: System::Void tr_func (String ^ fName) {
if ( File::Exists( fName ) ) {
try//начальное положение
{
FileStream^ myFStream=FileStream (fName, FileMode::Open);
}//это перемещаем если компилится, вниз на строку (до начала блока Catch)
 BinaryReader ^ bR1 = gcnew BinaryReader (myFStream);
array <Char> ^ tit2 = gcnew array <Char> (4);
String ^ str;
//Search of "TIT2"
int k = 0;
int endf;
catch (Exception^ e ) {
MessageBox::Show(e->ToString());
}
1
Заблокирован
26.02.2012, 17:30  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Извините, луше вначале так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private: System::Void tr_func (String ^ fName) {
if ( File::Exists( fName ) ) {
try//начальное положение
{
FileStream^ myFStream=FileStream (fName, FileMode::Open);
}//это перемещаем если компилится, вниз на строку (до начала блока Catch)
 BinaryReader ^ bR1 = gcnew BinaryReader (myFStream);
array <Char> ^ tit2 = gcnew array <Char> (4);
String ^ str;
//Search of "TIT2"
int k = 0;
int endf;
catch (Exception^ e ) {
MessageBox::Show(e->ToString());
}
На строку:
C++
1
FileStream^ myFStream=FileStream (fName, FileMode::Open);
Выдает ошибку:
C++
1
c:\users\связной\desktop\tagreader\tagreader\Form1.h(138): error C2065: myFStream: необъявленный идентификатор
Ой, все что-то сглупил, все уже
0
Заблокирован
26.02.2012, 17:41  [ТС]
Вылет вот на этом этапе:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    private: System::Void tr_func (String ^ fName) {
                 if ( File::Exists( fName ) ) {
                     try {
                         BinaryReader ^ bR1 = gcnew BinaryReader (File::Open (fName, FileMode::Open));
                         array <Char> ^ tit2 = gcnew array <Char> (4);
                         String ^ str;
                         //Search of "TIT2"
                         int k = 0;
                         int endf;
                         while ((endf != -1) || (str != "TIT2"))  {
                             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;
                         }
                     }
                     catch (EndOfStreamException^ e ) {
                         MessageBox::Show(e->ToString());
                     }
                 }
                 }
0
Заблокирован
26.02.2012, 17:46  [ТС]
Вот сама программа:
TagReader.zip

Может кто-нибудь сделать рабочую версию, просто работы еще много, а я завис на начальном этапе и даже не могу понять в чем ошибка?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
26.02.2012, 18:11
Извините у меня нет вашего mp3 но попробуйте так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private: System::Void tr_func (String ^ fName) {
FileStream^ myFStream;// вот здесь конечно сначала объявить - мой ляп!
if ( File::Exists( fName ) ) {
try//начальное положение
{
myFStream=FileStream (fName, FileMode::Open);//тут использовать - тип для объявления убрать
}//это перемещаем если компилится, вниз на строку (до начала блока Catch)
 BinaryReader ^ bR1 = gcnew BinaryReader (myFStream);
array <Char> ^ tit2 = gcnew array <Char> (4);
String ^ str;
//Search of "TIT2"
int k = 0;
int endf;
catch (Exception^ e ) {
MessageBox::Show(e->ToString());
}
1
Заблокирован
26.02.2012, 19:36  [ТС]
Цитата Сообщение от IGPIGP Посмотреть сообщение
Извините у меня нет вашего mp3 но попробуйте так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private: System::Void tr_func (String ^ fName) {
FileStream^ myFStream;// вот здесь конечно сначала объявить - мой ляп!
if ( File::Exists( fName ) ) {
try//начальное положение
{
myFStream=FileStream (fName, FileMode::Open);//тут использовать - тип для объявления убрать
}//это перемещаем если компилится, вниз на строку (до начала блока Catch)
 BinaryReader ^ bR1 = gcnew BinaryReader (myFStream);
array <Char> ^ tit2 = gcnew array <Char> (4);
String ^ str;
//Search of "TIT2"
int k = 0;
int endf;
catch (Exception^ e ) {
MessageBox::Show(e->ToString());
}
Извините, но на этот код компилятор выдает следующее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1>------ Построение начато: проект: TagReader, Конфигурация: Debug Win32 ------
1>Построение начато 26.02.2012 19:33:34.
1>InitializeBuildStatus:
1>  Обращение к "Debug\TagReader.unsuccessfulbuild".
1>GenerateTargetFrameworkMonikerAttribute:
1>Целевой объект "GenerateTargetFrameworkMonikerAttribute" пропускается, так как все выходные файлы актуальны по отношению к входным.
1>ClCompile:
1>  Для всех выходных данных обновления не требуется.
1>  TagReader.cpp
1>c:\users\связной\desktop\tagreader\tagreader\Form1.h(134): error C2440: =: невозможно преобразовать "System::IO::FileStream" в "System::IO::FileStream ^"
1>          Оператор определенного пользователем преобразования недоступен, или
1>          Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен
1>c:\users\связной\desktop\tagreader\tagreader\Form1.h(136): error C2317: для блока try, начинающегося в строке 133, нет соответствующих блоков catch
1>c:\users\связной\desktop\tagreader\tagreader\Form1.h(142): error C2318: нет блока try, связанного с этим блоком catch
1>c:\users\связной\desktop\tagreader\tagreader\Form1.h(143): error C2065: e: необъявленный идентификатор
1>c:\users\связной\desktop\tagreader\tagreader\Form1.h(143): error C2227: выражение слева от "->ToString" должно указывать на тип класса, структуры или объединения либо на универсальный тип
1>          тип: 'unknown-type'
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:00.22
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.02.2012, 19:36
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru