Input/output with files

28 August 2016

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับการเขียนโปรแกรมในการทำงานกับไฟล์ เพื่ออ่านข้อมูลจากไฟล์และเขียนข้อมูลลงไปบนไฟล์ในภาษา C#

โปรแกรมคอมพิวเตอร์ส่วนมากทำงานกับไฟล์ ซึ่งไฟล์จะแบ่งออกเป็น 2 ประเภท คือ text file และ binary ไฟล์ ในบางครั้งการเขียนโปรแกรมนั้นเราจำเป็นต้องเก็บข้อมูลในรูปของไฟล์ เช่น การเก็บข้อมูลการตั้งค่า หรือบันทึก log เพื่อนำมาใช้งานในการเปิดโปรแกรมครั้งใหม่ ในบทนี้ เราจะพูดถึงการเขียนโปรแกรมเพื่อทำงานกับ Text file ในภาษา C# ซึ่งเป็นรูปแบบการเก็บไฟล์ที่สะดวกและง่ายในการใช้งาน และสามารถเข้าถึงได้โดยโปรแกรมทุกประเภท

การอ่านค่าจาก text file

ต่อไปเป็นตัวอย่างของโปรแกรมในการอ่านไฟล์จากคอมพิวเตอร์ โดยโปรแกรมจะอ่านไฟล์จากพาทที่กำหนด และแสดงข้อความในไฟล์ ดังโค้ดข้างล่าง

using System;
using System.IO;

class ReadFromFile
{
    static void Main(string[] args)
    {
        string line;
        StreamReader file = null;

        try {
            file = new StreamReader("c:\\file.txt");

            while ((line = file.ReadLine()) != null)
            {
                Console.WriteLine(line);
            }
        } catch (FileNotFoundException e) {
            Console.WriteLine("Error: File not found.");
        } finally {

            if (file != null)
            {
                file.Close();
            }
        }
    }
}

ในตัวอย่างข้างบนเป็นวิธีที่ง่ายที่สุดในการอ่านไฟล์ด้วยภาษา C# เราใช้คลาส StreamReader จากเนมสเปซ System.IO; ที่ใช้สำหรับการอ่านไฟล์ เราเปิดไฟล์จาก "c:\\file.txt" ซึ่งเป็นไฟลฺ์ชื่อ file.txt ในไดร์ C

while ((line = file.ReadLine()) != null)
{
    Console.WriteLine(line);
}

ใน While loop เราใช้เมธอด file.ReadLine() วนซ้ำอ่านข้อความจากไฟล์ที่ละบรรทัดมาเก็บไว้ในตัวแปรชั่วคราว line และแสดงผลออกทางหน้าจอ ถ้าหากไฟล์สิ้นสุดเมธอดจะคืนค่า null กลับมา

นอกจากนี้เรายังตรวจจับความผิดพลาดที่อาจจะเกิดขึ้นในกรณีที่ไม่พบไฟล์ด้วย FileNotFoundException ผลลัพธ์ของโปรแกรมขึ้นอยู่กับไฟล์ของคุณ และคุณต้องกำหนดพาทของไฟล์ให้ถูกต้องด้วย การใช้ Exception กับไฟล์นั้นเป็นสิ่งที่จำเป็นในการจัดการกับข้อผิดพลาดที่อาจจะเกิดขึ้นในระหว่างที่ทำงานกับไฟล์

if (file != null)
{
    file.Close();
}

ในการทำงานกับไฟล์ทุกครั้ง เราจำเป็นต้องปิดการเชื่อมต่อของ File stream ทุกครั้งโดยารใช้เมธอด Close() เพื่อทำให้ไฟล์สามารถนำไปใช้งานอย่างอื่นได้ต่อไป

การเขียนลงบน text file

ตัวอย่างต่อไปเป็นการเขียนข้อความลงเป็น text ไฟล์ในภาษา C# เราจะเขียนลงทีละบรรทัดเช่นเดียวกันกับการอ่านไฟล์

using System;
using System.IO;

class WriteToFile
{
    static void Main(string[] args)
    {
        string line;
        StreamWriter file = new StreamWriter("d:\\settings.txt");

        file.WriteLine("Writing to file line 1.");
        file.WriteLine("Writing to file line 2.");
        file.WriteLine("Writing to file line 3.");

        Console.Write("Enter your message: ");
        line = Console.ReadLine();
        file.WriteLine(line);

        file.Close();

        Console.WriteLine("Writing to file succeed.");
    }
}

ในตัวอย่าง เป็นโปรแกรมในการเขียนข้อมูลลงไปบน text file ด้วยคลาส StreamWriter เราเปิดไฟล์ชื่อ settings.txt เพื่อเขียนข้อมูล ถ้าไฟล์ไม่มีอยู่โปรแกรมจะสร้างไฟล์ใหม่ ถ้าหากมีอยู่แล้วโปรแกรมจะลบไฟล์เดิมทิ้งไปและสร้างไฟล์ใหม่เพื่อเขียนข้อมูล

StreamWriter file = new StreamWriter("d:\\settings.txt");

นี่เป็นคำสั่งในการสร้างตัวแปรเพื่อเขียนไฟล์จากคลาส StreamWriter โดยใส่พาธของไฟล์ลงไปในคอนสตรัตเตอร์

file.WriteLine("Writing to file line 1.");
file.WriteLine("Writing to file line 2.");
file.WriteLine("Writing to file line 3.");

เราใช้เมธอด WriteLine() สำหรับเขียนข้อมูลลงไปใน text file ทีละบรรทัด และคุณสามารถใช้เมธอด Write() ได้เช่นกัน ซึ่งในการเขียนนั้นจะไม่ขึ้นบรรทัดใหม่

Enter your message: MarcusCode Tutorial
Writing to file succeed.

นี่เป็นตัวอย่างในการรันโปรแกรม โดยใส่ข้อความว่า "MarcusCode Tutorial" ในบรรทัดสุดท้ายที่รับจากคีย์บอร์ดเพื่อเขียนลงไปในไฟล์ และเราแสดงข้อความว่า "Writing to file succeed"

// settings.txt
Writing to file line 1.
Writing to file line 2.
Writing to file line 3.
MateoCode tutorial

และนี่เป็นผลลัพธ์ของไฟล์ settings.txt ที่ถูกเขียนขึ้น

การเขียนข้อมูลต่อท้ายไฟล์ (File appending)

ในการเก็บข้อมูลกับไฟล์บางรูปแบบนั้นจำเป็นที่จะต้องเขียนข้อมูลลงไปในไฟล์เดิม เราเรียกว่าการเขียนข้อมูลต่อท้ายไฟล์หรือ File appending ต่อไปเป็นตัวอย่างของโปรแกรมในการเขียนข้อมูลต่อท้ายไฟล์ในภาษา C#

using System;
using System.IO;

class ApendingToFile
{
    static void Main(string[] args)
    {
        Console.WriteLine("Enter 1 to create new file");
        Console.WriteLine("Enter 2 to apend to file");
        Console.Write("Your select: ");
        string choice = Console.ReadLine();

        StreamWriter file = null;
        string fileName = "d:\\my_file.txt";

        try {

            if (choice == "1")
            {
                file = new StreamWriter(fileName);
            }
            else
            {
                file = File.AppendText(fileName);
            }

            string line = null;

            do
            {
                Console.Write("Enter your message: ");
                line = Console.ReadLine();
                if (line != "exit")
                {
                    file.WriteLine(line);
                }

            } while (line != "exit");

        } catch (Exception e)
        {
            Console.WriteLine(e.Message);
        } finally {
            if (file != null)
            {
                file.Close();
            }
        }

        file.Close();

    }
}

ในตัวอย่าง นั้นเป็นโปรแกรมเขียนข้อมูลไปใน text file ซึ่งมีสองแบบให้เลือกที่เขียนคือการสร้างไฟล์ใหม่หรือเขียนต่อจากไฟล์เดิม โดยเมื่อผู้ใช้เลือก 1 หมายถึงเขียนไฟล์โดยสร้างขึ้นใหม่ และ 2 หมายถึงให้เขียนต่อไฟล์เดิม และดรารับข้อความที่ต้องการเขียนผ่านทางคีย์บอร์ดจนกว่าจะพิมพ์คำว่า "exit" เพื่อเป็นการจบการเขียนไฟล์

file = File.AppendText(fileName);

นี่เป็นคำสั่งในการเปิดไฟล์เพื่อเขียนต่อท้าย โดยการใช้เมธอด AppendText() จากคลาส File สำหรับสร้างตัวแปรอ่านไฟล์

ในบทนี้ คุณได้เรียนรู้การทำงานกับไฟล์ในภาษา C# โดยการอ่านไฟล์และการเขียนไฟล์ เพื่อเก็บข้อมูลโดยเฉพาะอย่างยิ่งกับ Text file และการเขียนต่อท้ายไฟล์เดิม

บทความนี้เป็นประโยชน์หรือไม่?Yes·No