6-Amaliy mashg’ulot: Fayl tizimi va oqimlarga doir masala yechish



Yüklə 108,37 Kb.
Pdf görüntüsü
tarix21.05.2023
ölçüsü108,37 Kb.
#118926
6-Amaliy mashg’ulot.Fayl tizimi va oqimlarga doir masala yechish



6-Amaliy mashg’ulot: Fayl tizimi va oqimlarga doir masala yechish. 
FileStream klassi mavhum Stream a'zosini fayllarni oqimlash uchun mos tarzda 
amalga oshirishni ta'minlaydi. Bu elementar oqim bo'lib, faqat bir bayt yoki bayt massivini 
yozishi yoki o'qishi mumkin. Biroq, siz kamdan-kam hollarda FileStream tipidagi a'zolar 
bilan muloqot qilishingiz kerak bo'ladi. Buning o'rniga, matnli ma'lumotlar yoki .NET 
turlari bilan ishlashni osonlashtiradigan oqimlar to’plamidan foydalanasiz. Biroq, tasvirlash 
maqsadida, FileStreamning sinxron o'qish/yozish imkoniyatlari bilan tajriba o'tkazish 
foydalidir. 
FileStream namunasi har qanday faylga ma'lumotlarni o'qish va yozish uchun 
ishlatiladi. FileStream namunasini yaratish uchun siz quyidagi ma'lumotlarni taqdim 
etishingiz kerak: 
Kirish uchun fayl. 
Faylni ochish rejimi. Masalan, siz yangi fayl yaratishni yoki mavjud faylni ochishni 
rejalashtiryapsizmi? Agar siz mavjud faylni ochishni rejalashtirmoqchi bo'lsangiz, mavjud 
tarkibni qayta yozish kerakmi yoki fayl oxiriga yangi ma'lumotlarni qo'shish kerakmi? 
Faylga kirish turi. Misol uchun, sizga o'qish yoki yozish uchun ruxsat kerakmi yoki 
ikkalasi ham kerakmi? 
Faylga kirish eksklyuziv bo'lishi kerakmi yoki bir vaqtning o'zida boshqa oqimlar 
tomonidan kirish imkoniyatini ko'rsatadigan almashish kerakmi. Agar shunday bo'lsa, 
boshqa mavzularni o'qish, yozish yoki ikkalasiga ruxsat beriladimi. 
Ushbu ma'lumotlarning birinchi qismi odatda kerakli faylga to'liq yo'lni o'z ichiga 
olgan qator sifatida taqdim etiladi. Biroq, satrga qo'shimcha ravishda, satr o'rniga Windows 
API uslubidagi fayl deskriptorini qabul qiladigan qo'shimcha konstruktorlar mavjud. Qolgan 
uchta ma'lumot uchta .NET ro'yxati FileMode, FileAccess va FileShare yordamida taqdim 
etiladi. Ushbu ro'yxatlarning ma'nolari jadvalda tasvirlangan: 
Hisoblash Qiymat 
FileMode Append, Create, CreateNew, Open, OpenOrCreate, Truncate 
FileAccess Read, ReadWrite, Write 
FileShare Delete, Inheritable, None, Read, ReadWrite, Write 
Esda tutingki, FileMode holatida faylning mavjud holatiga mos kelmaydigan rejim 
so'ralsa, istisno qilinishi mumkin. Qo'shish, Ochish va Kesish qiymatlari, agar fayl mavjud 
bo'lmasa, istisno qiladi va agar u allaqachon mavjud bo'lsa, CreateNew qiymati aksincha. 
Create va OpenOrCreate qiymatlari ikkala stsenariyda ham ishlaydi, lekin Yaratish har 
qanday mavjud faylni o'chiradi va uni dastlab bo'sh bo'lgan yangisi bilan almashtiradi. 
FileAccess va FileShare raqamlari bit bayroqlaridir, shuning uchun ularning 
qiymatlari bit yo'nalishi bo'yicha OR operatsiyasi yordamida birlashtirilishi mumkin; |. 
FileStream yaratish uchun ko'p sonli konstruktorlar mavjud. Eng oddiy uchtasi quyida 
tavsiflanganidek ishlaydi: 
// O'qish/yozish ruxsati bilan fayl yaratadi va ruxsat beradi 


// boshqa mavzular unga o'qish uchun ruxsat oladiFileStream fs = new FileStream(@"С:\C# 
Projects\Project.doc", FileMode.Create); 
// Avvalgisi bilan bir xil ishlaydi, lekin ruxsat beradi 
// boshqa mavzular yozish uchun faylga kirishadiFileStream fs2 = new FileStream(@"С:\C# 
Projects\Project2.doc", 
FileMode.Create, FileAccess.Write); 
// Oldingi konstruktorlar kabi bajaring, lekin
// fs3 ochiq qolsa, boshqa oqimlarga faylga kirish imkonini beradi 
FileStream fs3 = new FileStream(@"С:\C# Projects\Project3.doc", 
FileMode.Create, FileAccess.Write, FileShare.None); 
 
Fayllarni o'qish va yozish 
FileStream bayt darajasidagi fayllarga kirishni ifodalaydi, shuning uchun, masalan, 
matn fayliga bir yoki bir nechta satrlarni o'qish yoki yozish kerak bo'lsa, u holda bayt 
massivi maxsus usullar yordamida satrlarga aylantirilishi kerak. Shuning uchun matnli 
fayllar bilan ishlash uchun boshqa sinflardan foydalaniladi. 
Shu bilan birga, ma'lum bir tuzilishga ega bo'lgan turli xil ikkilik fayllar bilan ishlashda 
FileStream ma'lum ma'lumotlarni ajratib olish va uni qayta ishlash uchun juda foydali 
bo'lishi mumkin. 
Keling, matnli faylga o'qish-yozish misolini ko'rib chiqaylik: 
using System; 
using System.IO; 
namespace HelloApp 

class Program 

static void Main(string[] args) 

// fayl uchun katalog yarating 
string path = @"C:\SomeDir2"; 
DirectoryInfo dirInfo = new DirectoryInfo(path); 
if (!dirInfo.Exists) 

dirInfo.Create(); 

Console.WriteLine("Faylga yozish uchun satr kiriting:"); 
string text = Console.ReadLine(); 
// faylga yozish 
using (FileStream fstream = new FileStream($"{path}\note.txt", 
FileMode.OpenOrCreate)) 



// satrni baytga aylantirish 
byte[] array = System.Text.Encoding.Default.GetBytes(text); 
// запись массива байтов в файл 
fstream.Write(array, 0, array.Length); 
Console.WriteLine("Matn faylga yozildi "); 

// fayldan uqish 
using (FileStream fstream = File.OpenRead($"{path}\note.txt")) 

// satrni baytga aylantirish 
byte[] array = new byte[fstream.Length]; 
// malumotni uqish 
fstream.Read(array, 0, array.Length); 
// baytni satrga dekodirlaymiz 
string textFromFile = System.Text.Encoding.Default.GetString(array); 
Console.WriteLine($"Fayldan olinga matn: {textFromFile}"); 

Console.ReadLine(); 




Yüklə 108,37 Kb.

Dostları ilə paylaş:




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin