На этом шаге мы рассмотрим еще один способ чтения и записи в файл.
Из текста приложения мы видели, что для ввода/вывода файлов применялись методы из класса File пространства имен System::IO, и что процедура подготовки к применению этих методов была довольно громоздкой: в файл строки вводились текстовым редактором, а потом уже обрабатывались. Однако можно избежать этой внешней процедуры и организовать первичный ввод данных прямо из приложения, если воспользоваться компонентом TextBox в многострочном режиме. Эта возможность показана в примере ниже.
. . . . namespace My169_1 { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::IO; // для ввода/вывода . . . . private: /// <summary> void SaveTextToFile(String ^File,TextBox ^tb) { File::Delete(File); //Приведение формата TextBox к формату array<>: array<String^>^ tempArray = gcnew array<String^>( tb->Lines->Length ); tempArray = textBox1->Lines; File::WriteAllLines(File, tempArray); } // ------------------------------------------ void ReadTextFromFile(String ^File,TextBox ^tb) { tb->Clear(); tb->Lines = File::ReadAllLines(File);//возвращает String[] } // ------------------------------------------- /// Требуется переменная конструктора. /// </summary> System::ComponentModel::Container ^components; . . . . // Кнопка "Выход" private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { Close(); } // Кнопка "Переписать" private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { String^ p = "d:\\file3.txt"; SaveTextToFile(p, textBox1); ReadTextFromFile(p, textBox2); }
Результат работы приложения приведен на рисунке 1.
Рис.1. Результат работы приложения
Пояснение:
Для работы с файлами созданы две функции: SaveTextToFile() и ReadTextFromFile(), а в форме размещены два компонента TextBox. В одном компоненте набирается необходимый текст (свойство Multiline этих компонентов установлено в значение True - поля компонентов можно растягивать до необходимых размеров и вводить в одно из них множество строк, завершая ввод каждой строки нажатием клавиши Enter). Затем нажимается кнопка Переписать, в обработчике которой набранный в TextBox текст записывается в файл, а затем из него читается и записывается в другой компонент.
На следующем шаге мы рассмотрим компоненты CheckBox и RadioButton.