Input/output with files
ในบทนี้เราจะทำงานกับไฟล์ คุณจะได้เรียนรู้เกี่ยวกับการอ่านและเขียน text file ในภาษา Visual Basic
โปรแกรมคอมพิวเตอร์มักจะทำงานกับไฟล์ ไฟล์ใช้สำหรับเก็บข้อมูลบนหน่วยเก็บข้อมูล เช่น ฮาร์ดดิส แผ่นซีดีรอม หรือแฟลชไดรฟ์ ซึ่งการเก็บข้อมูลในหน่วยเก็บข้อมูลเหล่านี้จะไม่สูญหาย จะไม่เหมือนตัวแปรที่เก็บในแรม ข้อมูลจะหายเมื่อปิดโปรแกรม Text file เป็นรูปแบบของไฟล์พื้นฐานที่เก็บข้อมูลเป็นแบบตัวอักษร และมีการใช้งานเป็นจำนวนมากในการเขียนโปรแกรมคอมพิวเตอร์ เพราะเป็นประเภทของไฟล์ที่มนุษย์และคอมพิวเตอร์สามารถอ่านได้เข้าใจ
มาดูตัวอย่างการเขียนและอ่าน text file ในภาษา Visual Basic เราจะเขียนโปรแกรมสำหรับเขียนข้อมูลลงไปในไฟล์ หลังจากนั้นจะอ่านจากไฟล์นั้นขึ้นมาแสดงผล เราจะใช้คลาส StreamWriter
สำหรับการเขียน และคลาส StreamReader
สำหรับอ่านข้อมูลจากไฟล์ ซึ่งคลาสเหล่านี้สืบทอดมาจากคลาส Steam
ที่อยู่ใน System.IO
ไลบรารี่ของภาษา Visual Basic
Info: คลาส Stream สามารถใช้ได้กับหลายบริบท เช่น เมื่อเราทำงานกับไฟล์ เราเรียกว่าไฟล์ Steam หรือเมื่อเราอ่านข้อมูลหรือส่งข้อมูลในเน็ตเวิร์ค เราเรียกเน็ตเวิร์ค Stream ซึ่งในคลาสนี้ทำงานโดยการอ่านค่าจากปลายทางทีละตัวอักษร
Imports System.IO
Module FilesInputOutput
Sub Main()
Dim fileName As String = "D:\MyFile.txt"
' Writing to a file
Dim wr As StreamWriter = New StreamWriter(fileName)
wr.WriteLine("MarcusCode 2016")
wr.WriteLine("Writing and reading from a file.")
wr.WriteLine("This is a line.")
wr.WriteLine("This is another line.")
wr.Close()
' Reading from a file
Dim rd As StreamReader = New StreamReader(fileName)
Dim line As String = rd.ReadLine()
While (line IsNot Nothing)
Console.WriteLine(line)
line = rd.ReadLine()
End While
rd.Close()
End Sub
End Module
นี่เป็นโค้ดของโปรแกรมซึ่งจะแบ่งออกเป็นสองส่วนคือการเขียนและการอ่าน ในตัวอย่างเราจะเขียนข้อมูลลงไปในไฟล์ "D:\MyFile.txt"
และหลังจากนั้นเราจะได้ข้อมูลที่เขียนลงไปมาแสดงผล
Warning: ในการเขียนไฟล์นั้นคุณต้องตรวจสอบให้แน่ใจว่าปลายทางของไฟล์นั้นสามารถเขียนได้ โดยมี Permission ในการเขียน ถ้าหากคุณไม่มีสิทธิ์ที่จะเขียนไฟล์ในโฟล์เดอร์ โปรแกรมจะเกิด Error เกี่ยวกับ Permission
การเขียนข้อมูลลงบน text ไฟล์
ในส่วนแรกเป็นการเขียนข้อมูลลงไปในไฟล์โดยเราจะใช้คลาส StreamWriter
เป็นคลาสสำหรับส่งข้อมูลออกไปยังไฟล์ โดยคลาสนี้สนับสนุนสำ Characters Encoding แบบต่างๆ และค่าพื้นฐานจะเป็น UTF-8
Dim wr As StreamWriter = New StreamWriter(fileName)
ต่อมาเราสร้างออบเจ็คสำหรับการเขียนจากคลาส StreamWriter
และใส่ชื่อของไฟล์ที่ได้กำหนดในตัวแปร fileName
ลงในคอนสตรัคเตอร์ โดยในคำสั่งจะเป็นการสร้างไฟล์ใหม่เสมอ หากไฟล์มีอยู่แล้ว โปรแกรมจะทำการลบไฟล์เดิมออกแล้วเขียนไฟล์ใหม่
wr.WriteLine("MarcusCode 2016")
wr.WriteLine("Writing and reading from a file.")
wr.WriteLine("This is a line.")
wr.WriteLine("This is another line.")
นี่เป็นการเขียนข้อมูลลงไปบนไฟล์ทีละบรรทัด เพราะว่าเราใช้เมธอด WriteLine()
ในการเขียน มันจะเพิ่มบรรทัดใหม่ด้วยในแต่ละคำสั่ง คุณสามารถใช้เมธอด Write()
สำหรับการเขียนได้เช่นกัน เราได้เขียนข้อมูลลงไปในไฟล์เป็นจำนวน 4 บรรทัด
wr.Close()
ในคำสั่ง เมื่อสิ้นสุดการทำงานเราปิดการทำงานของตัวแปรออบเจ็ค Stream ด้วยเมธอด Close()
นี่เป็นสิ่งที่สำคัญในการทำงานกับไฟล์ ถ้าคุณไม่ปิดไฟล์จะไม่สามารถใช้งานได้สำหรับโปรแกรมอื่นหรืออาจะเกิดข้อผิดพลาดในการเขียนไฟล์ ดังนั้นในการทำงานกับไฟล์ คุณต้องเรียกใช้เมธอดนี้ทุกครั้งเมื่อมีการอ่านหรือเขียนไฟล์เสร็จแล้ว
MarcusCode 2016
Writing and reading from a file.
This is a line.
This is another line.
และนี่เป็นสิ่งที่คุณจะได้ในไฟล์ MyFile.txt
ซึ่งประกอบไปด้วยข้อความ 4 บรรทัดที่เราพึ่งได้เขียนลงไป
การอ่านข้อมูลจาก text ไฟล์
หลังจากที่เราเขียนข้อมูลลงบนไฟล์เรียบร้อยแล้ว ต่อไปเราจะทำการอ่านไฟล์นั้นด้วยคลาส StreamReader
ซึ่งเป็นคลาสสำหรับอ่านข้อมูลจาก Stream
Dim rd As StreamReader = New StreamReader(fileName)
เราสร้างตัวแปรออบเจ็ค StreamReader
สำหรับการอ่านข้อมูลจากไฟล์ และใส่ที่อยู่ของไฟล์ fileName
ในคอนสตรัคเตอร์ของออบเจ็ค
Dim line As String = rd.ReadLine()
While (line IsNot Nothing)
Console.WriteLine(line)
line = rd.ReadLine()
End While
เราใช้คำสั่ง While loop ในการวนอ่านข้อมูลจากไฟล์ทีละบรรทัดด้วยเมธอด ReadLine()
จนกว่าจะสิ้นสุดไฟล์เมื่อค่าของตัวแปร line
เป็น Nothing
ทำให้การอ่านเสร็จสิ้น และเราได้แสดงผลสำหรับการอ่านแต่ละบรรทัด
MarcusCode 2016
Writing and reading from a file.
This is a line.
This is another line.
นี่เป็นผลลัพธ์ของการแสดงผลข้อมูลทีอ่านมาจากไฟล์ ซึ่งเหมือนกันกับข้อมูลที่อยู่ในไฟล์ MyFile.txt
ของเรา
การเขียนข้อมูลต่อท้ายไฟล์ (Appending)
ในตัวอย่างก่อนหน้า เมื่อเรารันโปรแกรมในแต่ละครั้ง โปรแกรมจะสร้างไฟล์ใหม่เสมอ ในบางทีเราต้องการที่จะเขียนข้อมูลต่อไฟล์เดิม เช่น การเก็บข้อมูล Log ในแต่ละวัน คุณสามารถทำได้โดย
Dim wr As StreamWriter = File.AppendText(fileName)
wr.WriteLine("Appending text to the file.")
wr.Close()
นี่เป็นตัวอย่างโปรแกรมในการเขียนต่อท้ายไฟล์เดิม เราใช้เมธอด File.AppendText()
ในการสร้างออบเจ็ค และเขียนข้อมูลเพิ่มลงไปบนไฟล์
ในบทนี้คุณได้เรียนรู้กับการทำงานกับไฟล์ในเบื้องต้น ในการเขียนและการอ่านข้อมูลกับ text file การเขียนต่อท้ายไฟล์ (Appending file) ในภาษา Visual Basic โดยการใช้คลาส Strea