На этом шаге мы рассмотрим организацию чтения данных из файла теста.
Для того чтобы программа "Экзаменатор" была действительно универсальной, у пользователя должна быть возможность задать имя файла теста.
Обеспечить возможность настройки программы на работу с конкретным файлом можно несколькими способами. Например, программа может считать имя файла теста из файла конфигурации или получить его из командной строки ее запуска.
Командная строка — это команда (строка), которую пользователь должен набрать в окне Запуск программы, для того чтобы запустить программу. В простейшем случае командная строка — это имя exe-файла. В командной строке после имени exe-файла можно указать дополнительную информацию, которую надо передать программе, например имя файла, с которым должна работать программа.
Параметры, указанные пользователем при запуске программы, передаются функции main. Для того чтобы функция main могла получить параметры командной строки, ее объявление должно выглядеть так:
int main(array<System::String ^> ^args)
Как видно из объявления, параметр args — указатель на строковый массив, элементы которого и содержат параметры командной строки.
Функция main программы "Экзаменатор" (она находится в файле Examen.cpp) приведена ниже.
// Examen.cpp: главный файл проекта. #include "stdafx.h" #include "Form1.h" using namespace Examen; [STAThreadAttribute] int main(array<System::String ^> ^args) { // Включение визуальных эффектов Windows XP // до создания каких-либо элементов управления Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); String^ fpath; String^ fname; // проверим, указано ли имя файла теста if (args->Length > 0) { // указано только имя файла теста if (args[0]->IndexOf(":") == -1) { fpath = Application::StartupPath + "\\"; fname = args[0]; } else { // указано полное имя файла теста fpath = args[0]->Substring(0,args[0]->LastIndexOf("\\")+1); fname = args[0]->Substring(args[0]->LastIndexOf("\\")+1); } // проверим, существует ли указанный файл if (System::IO::FileInfo (fpath->ToString() +fname->ToString()).Exists) { // Создание главного окна и его запуск Application::Run(gcnew Form1(fpath,fname)); return 0; } else { MessageBox::Show( "Неправильно указано имя файла теста \n"+ "(нет папки или файла в указанной папке).\n" + fpath->ToString() + fname->ToString(), "Экзаменатор", MessageBoxButtons::OK, MessageBoxIcon::Stop); return -1; } } else { MessageBox::Show( "Файл теста необходимо указать " + "в команде запуска программы.\n" + "Например: 'exam economics.xml' " + "или 'exam c:\\spb.xml'.", "Экзаменатор", MessageBoxButtons::OK, MessageBoxIcon::Stop); return -1; } }
Как было сказано ранее, если программе нужны параметры, то они указываются в команде ее запуска после имени exe-файла. При запуске программы из среды разработки параметры нужно ввести в поле Command Arguments (Аргументы команды) раздела Configuration Properties | Debugging (Свойства конфигурации | Отладка) окна Property Pages (Страницы свойств) (рисунок 1), которое становится доступным в результате выбора в меню Project (Проект) команды Properties (Свойства).
Рис.1. Параметры командной строки в поле Command Arguments (Аргументы команды)
На следующем шаге мы приведем текст программы.