خواندن از یک فایل متنی

عمل خواندن از یک فایل متنی، بسیار شبیه به نوشتن در آن است. ابتدا باید یک FileStream که به فایل مورد نظر اشاره دارد ایجاد کنید. ولی به جای ارسال آن به کلاس StreamWriter باید آن را به کلاس StreamReader ارسال کنیم. برنامه زیر عمل خواندن از فایل را انجام می‌دهد. برنامه از فایل متنی که در درس قبلی ایجاد کرده‌ایم اطلاعات را می‌خواند.

   1: using System;
   2: using System.IO;
   3: using System.Text;
   4: using System.Collections.Generic;
   5: 
   6: namespace ReadingFromFile
   7: {
   8:     class Person
   9:     {
  10:         public string FirstName { get; set; }
  11:         public string LastName { get; set; }
  12:         public int Age { get; set; }
  13:     }
  14: 
  15:     class Program
  16:     {
  17:         static void Main()
  18:         {
  19:             List<Person> persons = new List<Person>();
  20: 
  21:             try
  22:             {
  23:                 FileStream fs =
  24:                    new FileStream("sample.txt", FileMode.Open, FileAccess.Read);
  25:                 StreamReader reader = new StreamReader(fs);
  26: 
  27:                 while (!reader.EndOfStream)
  28:                 {
  29:                     string line = reader.ReadLine();
  30:                     string[] fields = line.Split('#');
  31:                     Person newPerson = new Person();
  32:                     newPerson.FirstName = fields[0];
  33:                     newPerson.LastName = fields[1];
  34:                     newPerson.Age = Convert.ToInt32(fields[2]);
  35:                     persons.Add(newPerson);
  36:                 }
  37:             }
  38:             catch (IOException ex)
  39:             {
  40:                 Console.WriteLine(ex.Message);
  41:             }
  42: 
  43:             //Show each person's details
  44:             foreach (Person p in persons)
  45:             {
  46:                 Console.WriteLine("Name: {0} {1}nAge: {2}",
  47:                     p.FirstName, p.LastName, p.Age);
  48:             }
  49:         }
  50:     }
  51: }
Name: John Smith
Age: 21
Name: Mike Roberts	
Age: 31
Name: Garry Mathews
Age: 27

یک کلاس به نام Person (در خطوط 13-8) ایجاد کرده‌ایم. این کلاس اطلاعات مختلف هر شخص را که از فایل می‌خوانیم در خود نگهداری می‌کند. همچنین لیستی از اشخاص (در خط 19) ایجاد تا اطلاعات همه‌ی آنها را در یک مکان جمع آوری کنیم. برای باز کردن و خواندن از فایل متنی (خط 24) یک شیء از کلاس FileStream را ساخته و مسیر فایل، مقدار Open از نوع شمارشی FileMode و مقدار Read از نوع شمارشی FileAccess را به عنوان آرگومان به سازنده آن ارسال می‌کنیم.

یک شیء StreamReader در خط 25 ساخته و استریم ساخته شده را به عنوان آرگومان به سازنده آن ارسال می‌کنیم. شیء StreamReader ساخته شده مسئول خواندن اطلاعات از فایل متنی است. در خط 27 یک حلقه نوع while ساخته و با استفاده از خاصیت EndOfStream کلاس StreamReader بررسی می‌کنیم که اشاره گر به انتهای فایل نرسیده باشد. در داخل حلقه از متد ()ReadLine کلاس StreamReader استفاده کرده‌ایم. این متد از مکان قرار گیری اشاره گر تا انتهای خط را می‌خواند. سپس اشاره گر را به ابتدای خط بعدی انتقال می‌دهد. تمامی خط خوانده شده را در متغیر از نوع رشته قرار می‌دهیم (خط 29). سپس با استفاده از متد ()Split در خط 30 و ارسال کاراکتر # به آن اطلاعات مختلف هر شخص را جدا و در یک آرایه‌ی رشته‌ای قرار می‌دهیم.

یادآوری می‌شود که در درس قبلی از این کاراکتر (#) به عنوان جداکننده اطلاعات مختلف استفاده شده است. سپس یک شیء Person جدید ساخته و مقادیر موجود در عناصر آرایه را به خصوصیات شیء ایجاد شده اختصاص می‌دهیم (34-32). و در انتها آن شیء را به لیست اشخاص اضافه می‌کنیم. هنگامی که کار خواندن از فایل به پایان رسید با استفاده از یک حلقه اطلاعات تمامی اشخاص نمایش داده می‌شود.