Mavzu: Fayl tizmi bilan ishlash reja: Kirish. • Fayllar bilan ishlash. Sinf File va FileInfo Asosiy qism


Matin Fayllarini o’qish va yozish. StreamReader va StreamWriter



Download 25,88 Kb.
bet3/5
Sana05.07.2022
Hajmi25,88 Kb.
#740862
1   2   3   4   5
Bog'liq
kurs ishi (2)

Matin Fayllarini o’qish va yozish. StreamReader va StreamWriter
O'qish va yozish paytida ham using operatori ishlatiladi. Ushbu operatorni kod faylining boshida nom joylarini ulaydigan using direktifi bilan aralashtirmang. Operator foydalanish agar kod blokda bir ob'ekt yaratish imkonini beradi, shundan so'ng bu ob'ekt uchun Dispose usuli deb ataladi, va, shunday qilib,, ob'ekt halok bo'ladi. Bunday holda, fstream o'zgaruvchisi bunday ob'ekt sifatida xizmat qiladi.
Yozish va o'qish paytida kodlash obyekti ishlatiladi.Tizim nomlaridan standart.Text. Bu holda, biz uning ikki usullarini foydalanish: GetBytes satridan bayt bir qator osh va bayt bir qator bir chiziq olish uchun GetString.
Natijada, biz kiritgan satr eslatma fayliga yoziladi.txt. Aslida, bu ikkilik fayl (matn emas), garchi biz unga faqat bitta satr yozsak, biz ushbu faylni o'qiydigan shaklda ko'rib chiqamiz va uni matn muharriridan ochamiz. Biroq, biz tasodifiy baytlarni yozsak, masalan:
fstream.WriteByte(13);
fstream.WriteByte(103);
Keyin uning tushunchasi bilan bog'liq muammolar bo'lishi mumkin. Shuning uchun, to'g'ridan - to'g'ri matnli fayllar bilan ishlash uchun alohida sinflar-StreamReader va StreamWriter mo'ljallangan.
Ushbu oddiy konsol ilovasida bo'lsa-da, lekin haqiqiy ilovalarda filestream usullarining asenkron versiyalaridan foydalanish tavsiya etiladi, chunki fayl operatsiyalari uzoq vaqt talab qilishi va dastur ishida to'siq bo'lishi mumkin. Misol uchun, yuqoridagi dasturni asenkron usullarni qo'llash orqali o'zgartiramiz:
using System;
using System.IO;
using System.Threading.Tasks
namespace HelloApp
{
class Program
{
static async Task Main(string[] args)
{
// fayl uchun katalog yaratish
string path = @"C:\SomeDir3";
DirectoryInfo dirInfo = new DirectoryInfo(path);
if (!dirInfo.Exists)
{
dirInfo.Create();
}
Console.WriteLine ("faylga yozish uchun qatorni kiriting:");
string text = Console.ReadLine();

// faylga yozish


using (FileStream fstream = new FileStream($"{path}\note.txt", FileMode.OpenOrCreate))
{
byte[] array = System.Text.Encoding.Default.GetBytes(text);
// faylga bayt qator mos kelmaydigan, yozish
await fstream.WriteAsync(array, 0, array.Length);
Console.WriteLine ("matn faylga yozilgan");
// fayldan o'qish
using (FileStream fstream = File.OpenRead($"{path}\note.txt"))
{
byte[] array = new byte[fstream.Length];
// faylni asenkron o'qish
await fstream.ReadAsync(array, 0, array.Length);
string textFromFile = System.Text.Encoding.Default.GetString(array);
Console.WriteLine ($"fayldan matn: {textFromFile}");
Console.ReadLine();
Faylga o'zboshimchalik bilan kirish
Ko'pincha ikkilik fayllar ma'lum bir tuzilishga ega. Va bu strukturani bilish uchun fayldan kerakli ma'lumotni olishimiz yoki faylning ma'lum bir joyida ma'lum bir bayt to'plamini yozib olishimiz mumkin. Misol uchun, wav fayllarida to'g'ridan-to'g'ri ovoz ma'lumotlari 44 baytdan boshlanadi va 44 baytgacha turli metadata - audio kanallar soni, namuna olish tezligi va boshqalar.
Seek usuli bilan () faylda o'qish yoki yozishni boshlash uchun oqim kursorining holatini nazorat qilishimiz mumkin. Ushbu usul ikkita parametrni qabul qiladi: offset (ofset) va fayldagi pozitsiya. Fayldagi pozitsiya uchta qiymat bilan tavsiflanadi:
SeekOrigin.Begin: faylni ishga tushirish
SeekOrigin.End: faylning oxiri
SeekOrigin.Joriy: fayldagi joriy holat
O'qish yoki yozishni boshlaydigan oqim kursori ikkinchi parametr sifatida ko'rsatilgan pozitsiyaga nisbatan ofset qiymatiga oldinga siljiydi. Ofset salbiy bo'lishi mumkin, keyin kursor ijobiy bo'lsa, oldinga siljiydi.
Matn fayliga yozish uchun StreamWriter klassi ishlatiladi. StreamWriter ob'ektini yaratish uchun ishlatilishi mumkin bo'lgan ba'zi dizaynerlar:
StreamWriter( string path): path parametri orqali oqim bilan bog'liq bo'lgan faylga yo'l uzatiladi
StreamWriter( string path, bool append): Append parametri faylning oxiriga ma'lumot qo'shish yoki faylni yozish kerakligini bildiradi. Agar u to'g'ri bo'lsa, faylning oxiriga yangi ma'lumotlar qo'shiladi. Agar u noto'g'ri bo'lsa, fayl qayta yoziladi
StreamWriter(string path, bool append, System.Text.Encoding encoding): encoding parametri yozish paytida qo'llaniladigan kodlashni ko'rsatadi
Streamwriterning funksionalligi quyidagi usullar orqali amalga oshiriladi:
int Close(): saqlangan faylni yopadi va barcha resurslarni bo'shatadi
void Flush (): buferdagi qolgan ma'lumotlarni faylga yozib oladi va buferni tozalaydi.
Vazifa FlushAsync (): Flush usulining asenkron versiyasi
void Write( string value): int, double, char, string va h. K. kabi oddiy turdagi ma'lumotlarni faylga yozib oladi. shunga ko'ra, boshlang'ich turdagi ma'lumotlarni yozish uchun bir qator haddan tashqari Yuklangan versiyalar mavjud, masalan, yozing( char value), yozing( int value), yozing (double value) va boshqalar.

Vazifa WriteAsync(string qiymati): yozish usuli asenkron versiyasi


void WriteLine (string value): bundan tashqari, ma'lumotlarni yozib oladi, faqat yozilgandan so'ng faylga satrning oxiri belgisi qo'shiladi

Vazifa WriteLineAsync (string value): WriteLine usulining asenkron versiyasi


Misol uchun faylga kirishni ko'rib chiqing:
using System;
using System.IO;
namespace HelloApp
class Program
static void Main(string[] args)
string witePath = @"C:\SomeDir\hta.txt";
string matn = " Salom dunyo!\tinchlik...";
try
using (StreamWriter sw = new StreamWriter(writePath, false,System.Text.Encoding.Default))
sw.WriteLine(text);
using (StreamWriter sw = new StreamWriter(writePath, true, System.Text.Encoding.Default))
sw.WriteLine ("Dozaj");
sw.Write(4.5);
Console.WriteLine ("yozilgan");
catch (Exception e)
Console.WriteLine(e.Message);
Bunday holda, StreamWriter ob'ektini ikki marta yarating. Birinchi holda, agar fayl mavjud bo'lsa, u qayta yoziladi. Agar mavjud bo'lmasa, u yaratiladi. Va matn o'zgaruvchisidan matn yoziladi. Ikkinchi holda, fayl Dozaj uchun ochiladi va atom ma'lumotlari-satr va raqam yoziladi. Ikkala holatda ham standart kodlash ishlatiladi.
Dastur oxirida papkada C://SomeDir hta faylini topishimiz mumkin.quyidagi satrlarni ega bo'ladi txt:
Salom dunyo!
Hozirgacha dunyo...
Dozapis
4,5
Fayl operatsiyalari uzoq vaqt talab qilishi mumkinligi sababli, umuman, asenkron yozuvdan foydalanish tavsiya etiladi. Biz usullarning asenkron versiyalaridan foydalanamiz:
using System;
using System.IO;
using System.Threading.Tasks;
namespace HelloApp
class Program
static async Task Main(string[] args)
string writePath = @"C:\SomeDir\hta2.txt";
string matn = " Salom dunyo!\tinchlik...";
try
using (StreamWriter sw = new StreamWriter(writePath, false, System.Text.Encoding.Default))
await sw.WriteLineAsync(text);
using (StreamWriter sw = new StreamWriter(writePath, true, System.Text.Encoding.Default))
await sw.WriteLineAsync ("Dozaj");
await sw.WriteAsync("4,5");
Console.WriteLine ("yozilgan");
catch (Exception e)
Console.WriteLine(e.Message);
Asynchronous versiyalari barcha yozish usuli haddan tashqari uchun emas, deb iltimos unutmang.
Fayl va StreamReader-dan o'qish
Sinf StreamReader bizga matn faylidan barcha matnni yoki alohida satrlarni osongina o'qish imkonini beradi.
StreamReader sinf dizaynerlarining ba'zilari:
StreamReader( string path): path parametri orqali o'qiladigan faylga yo'l uzatiladi
StreamReader(string path, System.Text.Encoding encoding): kodlash parametri faylni o'qish uchun kodlashni belgilaydi
StreamReader usullari orasida quyidagilar mavjud:
void Close (): o'qish faylini yopadi va barcha resurslarni bo'shatadi
int Peek (): quyidagi mavjud belgini qaytaradi, agar belgilar bo'lmasa, u holda -1 qaytaradi
int Read (): o'qiydi va keyingi belgini raqamli ko'rinishda qaytaradi. Bu haddan tashqari versiyasini ega: Read (char[] array, int index, int count), array - array, belgilar o'qish qaerda, index-array qator indeks, o'qiladigan belgilar yozilgan qaysi boshlab, va count-o'qiladigan belgilar maksimal soni
Vazifa < int > ReadAsync(): o'qish usulining asenkron versiyasi
string ReadLine (): faylda bitta qatorni o'qiydi
string ReadLineAsync (): ReadLine usulining asenkron versiyasi
stringReadToEnd (): barcha matnni fayldan o'qiydi
string ReadToEndAsync (): readtoend usulining asenkron versiyasi
Birinchidan, matnni oldindan yozib olingan fayldan to'liq ko'rib chiqing:
using System;
using System.IO;
using System.Threading.Tasks;
namespace HelloApp
class Program
static async Task Main(string[] args)
string path = @"C:\SomeDir\hta.txt";
try
using (StreamReader sr = new StreamReader(path))
Console.WriteLine(sr.ReadToEnd());
// asenkron o'qish
using (StreamReader sr = new StreamReader(path))
Console.WriteLine(await sr.ReadToEndAsync());
catch (Exception e)
Console.WriteLine(e.Message);
Faylni satr orqali ko'rib chiqing:
string path= @"C:\SomeDir\hta.txt";
using (StreamReader sr = new StreamReader(path, System.Text.Encoding.Default))
string line;
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
// asenkron o'qish
using (StreamReader sr = new StreamReader(path, System.Text.Encoding.Default))
string line;
while ((line = await sr.ReadLineAsync()) != null)
Console.WriteLine(line);
Bunday holda, biz tsikl orqali chiziq bilan o'qiymiz while: while ((chiziq = sr.ReadLine()) != null) - birinchi navbatda sr funktsiyasining o'zgaruvchan chizig'i natijasini belgilang.ReadLine () va keyin null teng yoki yo'qligini tekshirib ko'ring. Sr obyekti faylning oxiriga yetganda va boshqa qatorlar qolmasa, sr usuli.ReadLine () nullni qaytarib beradi.

Download 25,88 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish