کار با فایل ها در سی شارپ (بخش دوم)
کار با فایل ها(بخش دوم)
خب در بخش قبل درمورد فضای نامی IO یکم صحبت کردیم و گفتیم که این فضا برای کار کردن با فایل ها و ذخیره اطلاعات بر روی فایل ها هست.بعد گفتیم که ابزار مهم این فضای نامی FileStreamهست که دو مشتق خیلی مهم داره
اولین مشتق که همون StreamWriterهست رو توضیح دادیم که برای نوشتن در فایل بود.
در این بخش میخوایم در مورد دومین مشتق از این ابزار رو توضیح بدیم:
B) StreamReader:
این ابزار برای خواندن از فایل استفاده میشه و نکاتی داره که باهم به اون میپردازیم.
یکی از نکات اینه که هر چی از این فایل خوانده بشه به صورت رشته هست یعنی اعداد رو هم بصورت رشته میخونه که شما باید با ابزار های سی شارپ رشته رو به عدد مورد نظر تبدیل کنید.
به عنوان مثال من فایلی دارم که اطلاعات پنج دانشجو و معدل هرکدام به صورت زیر درج شده است :
Ahmad mohammadi
۱۵/۶۲
sadegh moradi
۱۶/۱۳
saeed bagheri
۱۵/۴۲
zahra shokuhi
۱۷/۶۳
sara asadi
۱۵/۱۹
خب میخوام این دانشجو ها و نمراتشون در برنامه من نمایش داده بشه:
برای خواندن دوراه وجود داره اول اینکه فایل رو خط به خط بخونیم و دوم اینکه کل فایل رو بصورت یک جا بخونیم.من در اول کار بصورت خط به خط میخونم تا بهتر متوجه بشید
متد خواندن از فایل به صورت خط به خط بصورت زیر است:
text.ReadLine ();
منظور از textهمون آبجکتی هست که قراره بسازیم.من فعلا این رو گفتم تا با کدِ خواندن آشنا بشید
خب برای خواندن مراحل زیر رو انجام میدیم:
اول فضای نامی رو به برنامه اضافه میکنیم.البته امیدوارم که خودتون این کارو کروده باشین چون کل موضوع روی این فضا میچرخه
دوم از ابزار filestream آبجکت میسازیم به این صورت که در زیر میبینید
FileStream myfile = new FileStream ("test file", FileMode.open, FileAccess.Read);
سوم از StreamReader آبجکت میسازیم بصورت زیر
StreamReader text=new StreamReader (myfile);
خب فایل مورد نظر باز شده و آماده خواندن هست.
اگر به فایل نگاه کنیم متوجه میشیم که اگر از for استفاده کنیم به دو متغیر نیاز داریم چون در هر دور فقط یک رشته داریم و یک عدد اعشاری.
پس به صورت زیر عمل میکنیم
فرض کنید میخوام این اطلاعات رو داخل labelنمایش بدم به این ترتیب کد رو به این صورت مینویسم
اول به تعداد خطوط فایل مورد نظر نیاز دارم که به اینصورت پیدا میکنم:
int line = File.ReadLines("text.txt").Count();
و بعد
for (int i = 0; i < line/2; i++) { name = text.ReadLine(); average = float.Parse((text.ReadLine()).ToString()); label1.Text += name + "\n" + average + "\n"; }
و در آخر هم حتما فایل رو ببندید
text.Close();
خب همونطور که میبینید اطلاعات از فایل خوانده شد و داخل برنامه نمایش داده شد
من کد رو بصورت یک جا قرار میدم تا دسترسی برای شما ساده تر باشه
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; namespace file { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { FileStream myfile = new FileStream("test file", FileMode.Open, FileAccess.Read); StreamReader text = new StreamReader(myfile); string name; float average; label1.Text = "";//مقدار اولیه رو پاک کردم int line = File.ReadLines("test file").Count(); for (int i = 0; i < line/2; i++) { name = text.ReadLine(); average = float.Parse((text.ReadLine()).ToString()); label1.Text += name + "\n" + average + "\n"; } text.Close(); } } }
در ضمن اگر اینستاگرامی هستین فالوو فراموش نشه @takinweb
پایان این بخش 🙂