מדריך NET. – עבודה עם קבצי טקסט – Streams and Files

‏ • John Bryce

Stream הוא אובייקט הכותב או קורא מידע הכתוב בצורה רציפה ממשאב מסוים כגון: קובץ, רשת, זיכרון וכד’. המחלקה Stream היא מחלקת בסיס אבסטרקטית לכל סוגי ה- Streams הקיימים ב- NET.

FileStream הוא Stream המאפשר לכתוב או לקרוא מידע מקובץ.

כאשר נעבוד עם Stream נצטרך לכתוב את המידע בצורה בינארית כמערך של bytes. מכיוון שהמידע שאנו עובדים איתו בתוכניות אינו בנוי כך, אלא בצורות אחרות (כגון: מספרים, מחרוזות וכד’) בנו ב – NET. מחלקות אשר יודעות לכתוב ולקרוא את המידע בפורמטים שונים.

  • Readers – משפחה של אובייקטים שיודעים לקרוא מידע בפורמט מסוים מתוך Stream
  • Writers – משפחה של אובייקטים שיודעים לכתוב מידע בפורמט מסוים לתוך Stream

לדוגמא:

  • StreamWriter / StreamReader – כתיבה וקריאה בפורמט טקסטואלי, אם נשתמש בפורמט זה נוכל לקרוא את המידע שכתבנו באמצעות כל עורך טקסט (למשל notepad)
  • BinaryWriter / BinaryReader – כתיבה וקריאה בפורמט בינארי
  • קיים מגוון של פורמטים נוספים שנתמכים (למשל, XML ,HTML…)

כאשר נרצה לקרוא מידע שנכתב בפורמט מסוים, באמצעות Writer מסוים, נצטרך לקרוא את המידע באותו הפורמט, באמצעות Reader תואם.

בכדי ליצור FileStream צריך לספק לו את נתיב ושם הקובץ (string) ושיטת הפתיחה, שהוא ערך מתוך ה- FileMode enum. שיטת הפתיחה מציינת האם הקובץ נפתח לכתיבה / לקריאה / להוספה וכד’.

דוגמא לפתיחת קובץ לקריאה בשם data.txt הנמצא ב- :C :

FileStream fs = new FileStream(@"C:data.txt",
                              FileMode.Append,
                              FileAccess.Write);

כאשר נסיים את העבודה עם הקובץ חובה לסגור אותו אחרת תהיה לנו בעיה בקריאה ממנו:

 fs.Close();

יצירת StreamWriter שיכתוב אל הקובץ בפורמט טקסטואלי:

StreamWriter writer = new StreamWriter(fs);

בכדי לכתוב נפעיל אחת מפונקציות הכתיבה המתחילות ב- Write:

writer.WriteLine("some text...");

בכדי לקרוא מהקובץ נפתח אותו לקריאה, נשתמש ב- reader מתאים ונפעיל אחת מפונקציות הקריאה המתחילות ב- Read:

FileStream fs = new FileStream(@"C:data.txt",
                                FileMode.Open,
                                FileAccess.Read);

StreamReader reader = new StreamReader(fs);

string str = reader.ReadLine();

דוגמא מלאה לכתיבה וקריאה של קובץ – במידה והקובץ לכתיבה כבר קיים, התוכנית תוסיף לו את המידע החדש. אחרת, התוכנית תיצור את הקובץ ולאחר מכן תוסיף לו את המידע:

using System;
using System.IO;

namespace Text_ReadWrite
{
  class Program
  {
    const string filename = @"C:data.txt";

    static void Main(string[] args)
    {
      WritingText();
      ReadingText();
    }

    private static void WritingText()
    {
      FileStream fs;

      if (File.Exists(filename))
      {
        fs = new FileStream(filename,
                            FileMode.Append,
                            FileAccess.Write);
      }
      else
      {
        fs = new FileStream(filename,
                            FileMode.Create,
                            FileAccess.Write);
      }

      StreamWriter writer = new StreamWriter(fs);

      writer.WriteLine("some text...");
      writer.WriteLine(123);

      writer.Close();
      fs.Close();
    }

    private static void ReadingText()
    {
      FileStream fs = new FileStream(filename,
                                     FileMode.Open,
                                     FileAccess.Read);

      StreamReader reader = new StreamReader(fs);

      string str = reader.ReadToEnd();
      Console.WriteLine(str);

      reader.Close();
      fs.Close();
    }
  }
}

ישנם מחלקות נוספות לעבודה עם קבצים וספריות המאפשרות פעולות כגון: מחיקת קבצים, העתקת קבצים, יצירת ספריות, רשימת קבצים הקיימים בספריה מסוימת ועוד:

  • File – מספקת פונקציות סטטיות לעבודה עם קבצים
  • FileInfo – מספקת פונקציות מופע לעבודה עם קבצים
  • Directory – מספקת פונקציות סטטיות לעבודה עם ספריות
  • DirectoryInfo – מספקת פונקציות מופע לעבודה עם ספריות

תגיות: , , ,

ליאור זמיר

כיום אני ה- Webmaster של תוכנית החדשנות של HPE Software.לפני כן, הייתי מנהל תחום Webmaster ומרצה בכיר בג'ון-ברייס (במשך 9 שנים) בקורסים לפיתוח ותיכנות באמצעות Microsoft .NET, מולטימדיה, בניית אתרי אינטרנט ואינטראנט. פיתוח הדרכה ומתן ייעוץ טכנולוגי.

תגובות בפייסבוק