Текстовой формат данных для Smartdevice. Ввод-вывод в текстовые файлы
Шаг 8. Создаем функцию записи структуры данных в файл
private void file_write()
{// задаем поток
StreamWriter fin_out;
try {// проверяем доступность файла
fin_out=new StreamWriter(file_name);
}
catch(IOException exc) {
MessageBox.Show ("Невозможно открыть файл.","Ошибка");
return;
}
// считываем данные текстовых полей формы
foreach (Control t in this.Controls) {
if (t is TextBox) // условие: если элемент формы – текстовое поле
fin_out.Write(t.Text+"\r\n"); // пишем значения полей в файл
}
fin_out.Close(); // закрываем файлНа этом шаге можно закрыть функцию фигурной скобкой "}" и откомпилировать программу. При запуске откомпилированной программы, активизировав опцию меню "Сохранить", на диске должен быть создан файл price.txt, содержащий значения текстовых полей формы программы.
Шаг 9. Добавляем в функцию file_write() данные состояния флажков checkbox
Перед закрывающей функцию file_write() фигурной скобкой пишем:
//Теперь открываем файл для добавления
try{
fin_out=new StreamWriter(file_name,true);
}
catch(IOException exc) {
MessageBox.Show ("Невозможно открыть файл.","Ошибка");
return;
}
// пишем состояние всех восьми флажков
string h1=this.checkBox1.CheckState.ToString();
fin_out.Write(h1.ToString()+"\r\n"); // дописываем в файл
string h2=this.checkBox2.CheckState.ToString();
fin_out.Write(h2.ToString()+"\r\n");
string h3=this.checkBox3.CheckState.ToString();
fin_out.Write(h3.ToString()+"\r\n");
string h4=this.checkBox4.CheckState.ToString();
fin_out.Write(h4.ToString()+"\r\n");
string h5=this.checkBox5.CheckState.ToString();
fin_out.Write(h5.ToString()+"\r\n");
string h6=this.checkBox6.CheckState.ToString();
fin_out.Write(h6.ToString()+"\r\n");
string h7=this.checkBox7.CheckState.ToString();
fin_out.Write(h7.ToString()+"\r\n");
string h8=this.checkBox8.CheckState.ToString();
fin_out.Write(h8.ToString()+"\r\n");
// считываем данные текстовых полей 1-й закладки
foreach (Control t1 in this.tabPage1.Controls) {
if (t1 is TextBox)
fin_out.Write(t1.Text.ToString()+"\r\n");
}
// считываем данные текстовых полей 2-й закладки
foreach (Control t2 in this.tabPage2.Controls) {
if (t2 is TextBox)
fin_out.Write(t2.Text+"\r\n");
}
fin_out.Close();// закрываем файл и выводим сообщение
MessageBox.Show("Данные сохранены в файле "+file_name,"Запись на диск");
} // закрывающая фигурная скобкаШаг 10. Дописываем функцию file_read()
Теперь, когда данные в файле price.txt структурированы, перед закрывающей функцию file_read() фигурной скобкой пишем:
// Считываем значения из файла
StreamReader fstr_in=new StreamReader(fin);
string s="0"; // символ в строке
int i=0; // номер строки
//в переменную s считываются все символы, пока не кончится строка
while((s=fstr_in.ReadLine())!=null) {
i=i+1;
if (i = = 1){this.textBox1.Text=s;} // Марка автомобиля в textBox1
if (i = = 2) {// первый флажок в checkBox1
if (s = = "Unchecked") { this.checkBox1.Checked=false;}
else {this.checkBox1.Checked=true;}
}
if (i = = 3) {// второй флажок
if (s = = "Unchecked") { this.checkBox2.Checked=false;}
else {this.checkBox2.Checked=true;}
}
if (i = = 4) {// третий флажок
if (s = = "Unchecked") { this.checkBox3.Checked=false;}
else { this.checkBox3.Checked=true;}
}
if (i = = 5) {// четвертый флажок
if (s = = "Unchecked") { this.checkBox4.Checked=false;}
else { this.checkBox4.Checked=true;}
}
if ( i = = 6) {// пятый флажок
if (s = = "Unchecked") { this.checkBox5.Checked=false;}
else { this.checkBox5.Checked=true;}
}
if (i = = 7) {// шестой флажок
if (s = = "Unchecked") { this.checkBox6.Checked=false;}
else { this.checkBox6.Checked=true;}
}
if (i = = 8) {// седьмой флажок
if (s = = "Unchecked") {this.checkBox7.Checked=false;}
else { this.checkBox7.Checked=true;}
}
if ( i = = 9) {// восьмой флажок
if (s = = "Unchecked") { this.checkBox8.Checked=false;}
else { this.checkBox8.Checked=true;}
}/* Заносим данные в текстовые поля. Отметим, что порядок расположения и обозначения полей зависит от последовательности конструирования графического интерфейса. Поэтому, в нашем примере, обозначения могут не совпадать с автоматически создаваемыми элементами форм редактором Visual Studio */
if (i = = 10) {this.textBox14.Text=s;}
if (i = = 11) {this.textBox13.Text=s;/* преобразуем текстовой формат поля в числовой и заносим значение в переменную цены комплектации автомобиля */
comp_acc=int.Parse(this.textBox13.Text);
}
if (i = = 12) {this.textBox4.Text=s;}
if (i = = 13) {this.textBox3.Text=s;}
if (i = = 14) {this.textBox2.Text=s;}
if (i = = 15) {this.textBox12.Text=s;}
if (i = = 16) {this.textBox11.Text=s;}
if (i = = 17) {this.textBox10.Text=s;}
if (i = = 18) {this.textBox9.Text=s;}
if (i = = 19) {this.textBox8.Text=s;}
if (i = = 20) {this.textBox7.Text=s;}
if (i = = 21) {this.textBox6.Text=s;}
if (i = = 22) {this.textBox5.Text=s;}
}// конец цикла
fstr_in.Close();
return;
} // закрывающая функцию фигурная скобкаТеперь следует удалить или переименовать файл price.txt, откомпилировать и запустить программу. В textBox13 нужно внести цифру, чтобы избежать генерации исключения операционной системой, заполнить остальные поля и сохранить файл. Структуру (одно поле) и данные (22 записи) файла можно просмотреть в режиме блокнота – рис.2.4
