Input/output with files

4 November 2016

ในบทนี้เราจะทำงานกับไฟล์ คุณจะได้เรียนรู้เกี่ยวกับการอ่านและเขียน 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

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