3.10-расм. Тугма босилишини иммитация қилиш
IV. Матнли ва бинар файллардан ўқиш ва унга маълумот ёзиш. Матнли муҳаррир.
27-мисол. Unicode кодировкали матнли файлдан ўқиш/ёзиш. try..catch қайта ишлаш
Маълумотларни матнли шаклда дискда сақлаш кенг тарқалган амаллардан ҳисобланади. Матнли ва матнли бўлмаган файллар ҳам иккили файл бўлиб, агар бирор матн муҳарририда тўғридан тўғри ўқиш мумкин бўлган файллар “матнли” дейилади. Матнли файлдаги маълумотларни ўқиб олиш ва улардан фойдаланиш жуда осон амалга оширилиши мумкин.
// StreamReader оркали файлдан укиб олиш
var Reader = new System.IO.StreamReader(@"D:\Text1.txt");
// Матнли майдонга файл мазмунини узатиш
textBox1.Text = Reader.ReadToEnd();
Reader.Close();
Аммо ушбу дастурий кодда баъзи нюанслар мавжуд. Матнли майдон ва иккита тугмадан иборат форма ҳосил қиламиз. Биринчи тугма босилганда матнли файлдаги маълумот Unicode кодировкаси орқали ўқиб олинади. Иккинчи тугма босилганда эса таҳрирланган файл дискка сақлаб қўйилади.
Ушбу масалани ҳал қилиш учун VS 2012 муҳитини ишга туширамиз. Сўнгра янги Windows Forms Application (Приложение Windows Forms) лойиҳасини ҳосил қилиб, унга TxtUnicode номини берамиз.
Кейинги қадамда ToolBox панелидан битта TextBox ва иккита Button бошқарув элементларини танлаб, уни формага жойлаштирамиз. Сўнгра матнли майдоннинг Multiline хусусиятига True қийматини берамиз. Натижада матнли майдонда киритилган маълумот бир нечта сатрда намойиш қилинади. Битта тугма файлни очиш учун, иккинчиси матнли майдондаги маълумотларни файлга ёзиш учун ишлатилади. Қуйидаги 4.1 листингда ушбу дастурнинг коди келтирилган:
4.1 листинг. Unicode кодировкасидаги матнли файлни ўқиш/ёзиш
|
// Unicode кодировкасида ёзилган матнли файлдан укиш/ёзиш
using System;
using System.Drawing;
using System.Windows.Forms;
namespace TxtUnicode
{
public partial class Form1 : Form
{
// Fayl узгарувчисини эълон киламиз.
String Fayl;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// Бошлангич кийматларни урнатиш:
textBox1.Multiline = true;
textBox1.Clear();
textBox1.Size = new Size(268, 112);
button1.Text = "Очиш";
button1.TabIndex = 0;
button2.Text = "Саклаш";
this.Text = "Unicode кодировкаси";
Fayl = @"D:\Text1.txt";
}
private void button1_Click(object sender, EventArgs e)
{
// Очиш тугмасини босиш
// Агар UNICODE кодировкасида файл очилса, барча символлар куринади:
try
{ // Файлдан маълумотларни укиб олиш учун StreamReader объекти:
var Reader = new System.IO.StreamReader(Fayl);
// Матнли файлни юклаб олиш:
textBox1.Text = Reader.ReadToEnd();
Reader.Close(); // файлни ёпиш
// UNICODE кодировкасидаги файлни массивга ёзиб олиш
// (Open ва Close сиз):
// var Massiv = System.IO.File.
// ReadAllLines(@"D:\Text1.txt");
}
catch (System.IO.FileNotFoundException xatolik)
{
// Кайта ишлаш:
MessageBox.Show(xatolik.Message + "\n" +
"Файл мавжуд эмас", "Хатолик",
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
}
catch (Exception xatolik)
{
// Бошка турдаги хатолик:
MessageBox.Show(xatolik.Message, "Хатолик",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
private void button2_Click(object sender, EventArgs e)
{
// Саклаш тугмаси:
try
{ // Файлга ёзиш учун StreamWriter объектини хосил килиш:
var Writer = new System.IO.
StreamWriter(Fayl, false);
Writer.Write(textBox1.Text);
Writer.Close();
// Бошка усулда хам файлга ёзиш мумкин
// System.IO.File.WriteAllText(
// @"D:\tmp.tmp", textBox1.Text);
}
catch (Exception xatolik)
{
// Хатоликларни аниклаш:
MessageBox.Show(xatolik.Message, "Ошибка",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
}
}
|
Ушбу дастурда try блокидан фойдаланилган бўлиб, у қуйидаги мақсадда фойдаланилади. Ушбу блокда бирор амал бажарилишига ҳаракат қилинади. Агар ушбу амал тўғри бажарилмаса (масалан, файл мавжуд бўлмаса) бошқарув catch блокиги узатилади ва содир бўлган хатолик (Exception) қайта ишланади. Бизнинг дастурда «Очиш» тугмаси босилганда d:\text1.txt манзилида жойлашган файлни очишга ҳаракат қилинади.
Do'stlaringiz bilan baham: |