Input/output with files
ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับการเขียนโปรแกรมในการทำงานกับไฟล์ เพื่ออ่านข้อมูลจากไฟล์และเขียนข้อมูลลงไปบนไฟล์ในภาษา 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 และการเขียนต่อท้ายไฟล์เดิม