@nait123321

[Visual CLR] Почему не редактирует бинарный файл?

Здравствуйте, проблема в следующем: У меня есть бинарный файл с тестами, я его считываю с файла в richtextbox, вся информация отображается в текстовом поле, там я редактирую любой слово, после чего записываю весь текст с формы в файл, и тут возникает ошибка. Вот скриншот:
lBfkc1gz8MU.jpg
Вот код:
if (T == false)
	{
		FILE *file;
		S_Data data;
		file = fopen("test.txt", "r");
		richTextBox1->Clear();
		fread(&data, sizeof(data), 1, file);//читання з файлу
		richTextBox1->Text += marshal_as<String^>(data.question) + " " + marshal_as<String^>(data.answer1) + " " + marshal_as<String^>(data.answer2) + " " + marshal_as<String^>(data.answer3) + " " + marshal_as<String^>(data.answer4) + " " + marshal_as<String^>(data.answert);
		fread(&data, sizeof(data), 1, file);
		T = true;
		button1->Text = "Зберегти";
		while (!feof(file))  //поки не кінець файлу, виконуємо наступні дії
		{

			richTextBox1->Text += "\r\n";//переход на следующий ряд
			richTextBox1->Text += marshal_as<String^>(data.question) + " " + marshal_as<String^>(data.answer1) + " " + marshal_as<String^>(data.answer2) + " " + marshal_as<String^>(data.answer3) + " " + marshal_as<String^>(data.answer4) + " " + marshal_as<String^>(data.answert);
			fread(&data, sizeof(data), 1, file);
		}
		fclose(file);
	}
	else
		{
			T = false;
			button1->Text = "Тестування";
			FILE *file2;
			S_Data data;
			file2 = fopen("test.txt", "w");
		for (int i = 0; i < richTextBox1->Lines->Length; i++)//цикл по всем рядам
		{
			if (richTextBox1->Lines[i]->ToString() != "")//якщо текстовое поле не пустое
			{
				
				char*head = (char*)(void*)Marshal::StringToHGlobalAnsi(richTextBox1->Lines[i]->ToString());
				head = tok(data.question, head, ' ');
				if (head == 0)
				{
					MessageBox::Show("не вистачає питання", "помилка");
					return;
				}
				head = tok(data.answer1, head, ' ');
				if (head == 0)
				{
					MessageBox::Show("не вистачає 1 відопвіді", "помилка");
					return;
				}
				head = tok(data.answer2, head, ' ');
				if (head == 0)
				{
					MessageBox::Show("не вистачає 2 відповіді", "помилка");
					return;
				}
				head = tok(data.answer3, head, ' ');
				if (head == 0)
				{
					MessageBox::Show("не вистачає 3 відопвіді", "помилка");
					return;
				}
				head = tok(data.answer4, head, ' ');
				if (head == 0)
				{
					MessageBox::Show("не вистачає 4 відопвіді", "помилка");
					return;
				}
				head = tok(data.answert, head, ' ');
				if (head == 0)
				{
					MessageBox::Show("не вистачає правильної відопвіді", "помилка");
					return;
				}
				fwrite(&data, sizeof(data), 1, file2);//запис у файл
			}
		}
		fclose(file2);
		richTextBox1->Clear();
	}
	
}


В чём ошибка?
  • Вопрос задан
  • 162 просмотра
Пригласить эксперта
Ответы на вопрос 2
@dmitryKovalskiy
программист средней руки
У вас есть код, студия и 2(надеюсь) руки. что вам мешает в отладке посмотреть тип исключения? Или просто прошагать алгоритм? Ваш скриншот говорит лишь о том что приложение с грохотом упало, а сам код в данном случае это только половина успеха - вторая это окружение(ваша машина, на которой вы сие запускаете).
Ответ написан
Комментировать
@drc
После file2 = fopen("test.txt", "w"); хорошо бы проверить открылся ли файл, а то может он н еоткрылся а вы туда и писать пытаетесь и закрывать его потом. Да и раз уж работа с файлом бинарная, окрывать лучше как wb.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы