การเขียนโปรแกรมคอมพิวเตอร์ - ไฟล์ I / O

ไฟล์คอมพิวเตอร์

ไฟล์คอมพิวเตอร์ใช้เพื่อจัดเก็บข้อมูลในรูปแบบดิจิทัลเช่นข้อความธรรมดาข้อมูลรูปภาพหรือเนื้อหาอื่น ๆ ไฟล์คอมพิวเตอร์สามารถจัดระเบียบภายในไดเร็กทอรีต่างๆ ไฟล์ใช้เพื่อเก็บข้อมูลดิจิทัลในขณะที่ไดเร็กทอรีใช้เพื่อเก็บไฟล์

ไฟล์คอมพิวเตอร์ถือได้ว่าเป็นเอกสารดิจิทัลที่เป็นกระดาษ ขณะเขียนโปรแกรมคุณเก็บซอร์สโค้ดไว้ในไฟล์ข้อความที่มีนามสกุลต่างกันตัวอย่างเช่นไฟล์การเขียนโปรแกรม C จะลงท้ายด้วยนามสกุล.c, ไฟล์การเขียนโปรแกรม Java ด้วย .javaและไฟล์ Python ที่มีไฟล์ .py.

อินพุต / เอาต์พุตไฟล์

โดยปกติคุณจะสร้างไฟล์โดยใช้โปรแกรมแก้ไขข้อความเช่น notepad, MS Word, MS Excel หรือ MS Powerpoint เป็นต้นอย่างไรก็ตามหลาย ๆ ครั้งเราจำเป็นต้องสร้างไฟล์โดยใช้โปรแกรมคอมพิวเตอร์เช่นกัน เราสามารถแก้ไขไฟล์ที่มีอยู่โดยใช้โปรแกรมคอมพิวเตอร์

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

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

โหมดการทำงานของไฟล์

ก่อนที่เราจะเริ่มทำงานกับไฟล์ใด ๆ โดยใช้โปรแกรมคอมพิวเตอร์เราจำเป็นต้องสร้างไฟล์ใหม่หากไม่มีอยู่หรือเปิดไฟล์ที่มีอยู่แล้ว ไม่ว่าในกรณีใดเราสามารถเปิดไฟล์ในโหมดต่อไปนี้ -

  • Read-Only Mode- หากคุณกำลังจะอ่านไฟล์ที่มีอยู่และคุณไม่ต้องการเขียนเนื้อหาใด ๆ เพิ่มเติมในไฟล์คุณจะเปิดไฟล์ในโหมดอ่านอย่างเดียว ภาษาโปรแกรมเกือบทั้งหมดมีไวยากรณ์สำหรับเปิดไฟล์ในโหมดอ่านอย่างเดียว

  • Write-Only Mode- หากคุณกำลังจะเขียนลงในไฟล์ที่มีอยู่หรือไฟล์ที่สร้างขึ้นใหม่ แต่คุณไม่ต้องการอ่านเนื้อหาที่เขียนจากไฟล์นั้นคุณจะเปิดไฟล์ในโหมดเขียนอย่างเดียว ภาษาโปรแกรมทั้งหมดมีไวยากรณ์เพื่อเปิดไฟล์ในโหมดเขียนอย่างเดียว

  • Read & Write Mode - หากคุณกำลังจะอ่านและเขียนลงในไฟล์เดียวกันคุณจะเปิดไฟล์ในโหมดอ่านและเขียน

  • Append Mode- เมื่อคุณเปิดไฟล์เพื่อเขียนมันจะช่วยให้คุณสามารถเริ่มเขียนได้จากจุดเริ่มต้นของไฟล์ อย่างไรก็ตามมันจะเขียนทับเนื้อหาที่มีอยู่ถ้ามี สมมติว่าเราไม่ต้องการเขียนทับเนื้อหาใด ๆ ที่มีอยู่จากนั้นเราจะเปิดไฟล์ในโหมดผนวก ท้ายที่สุดแล้วโหมดต่อท้ายคือโหมดการเขียนซึ่งทำให้สามารถต่อท้ายเนื้อหาได้ที่ท้ายไฟล์ ภาษาโปรแกรมเกือบทั้งหมดมีไวยากรณ์เพื่อเปิดไฟล์ในโหมดผนวก

ในส่วนต่อไปนี้เราจะเรียนรู้วิธีการเปิดไฟล์ใหม่วิธีเขียนลงในไฟล์และวิธีการอ่านและผนวกเนื้อหาเพิ่มเติมลงในไฟล์เดียวกันในภายหลัง

กำลังเปิดไฟล์

คุณสามารถใช้ไฟล์ fopen()เพื่อสร้างไฟล์ใหม่หรือเปิดไฟล์ที่มีอยู่ การเรียกใช้นี้จะเริ่มต้นอ็อบเจ็กต์ประเภทFILEซึ่งมีข้อมูลทั้งหมดที่จำเป็นในการควบคุมสตรีม นี่คือต้นแบบคือลายเซ็นของการเรียกใช้ฟังก์ชันนี้ -

FILE *fopen( const char * filename, const char * mode );

ที่นี่ filename เป็นสตริงลิเทอรัลซึ่งคุณจะใช้ตั้งชื่อไฟล์และเข้าถึง mode สามารถมีค่าใดค่าหนึ่งต่อไปนี้ -

ซีเนียร์ No โหมดและคำอธิบาย
1

r

เปิดไฟล์ข้อความที่มีอยู่เพื่อจุดประสงค์ในการอ่าน

2

w

เปิดไฟล์ข้อความเพื่อเขียน หากไม่มีอยู่ไฟล์ใหม่จะถูกสร้างขึ้น ที่นี่โปรแกรมของคุณจะเริ่มเขียนเนื้อหาจากจุดเริ่มต้นของไฟล์

3

a

เปิดไฟล์ข้อความเพื่อเขียนในโหมดต่อท้าย หากไม่มีอยู่ไฟล์ใหม่จะถูกสร้างขึ้น ที่นี่โปรแกรมของคุณจะเริ่มต่อท้ายเนื้อหาในเนื้อหาไฟล์ที่มีอยู่

4

r+

เปิดไฟล์ข้อความสำหรับอ่านและเขียนทั้งสองอย่าง

5

w+

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

6

a+

เปิดไฟล์ข้อความสำหรับทั้งการอ่านและการเขียน จะสร้างไฟล์หากไม่มีอยู่ การอ่านจะเริ่มจากจุดเริ่มต้น แต่การเขียนสามารถต่อท้ายได้เท่านั้น

การปิดไฟล์

ในการปิดไฟล์ให้ใช้ไฟล์ fclose( )ฟังก์ชัน ต้นแบบของฟังก์ชันนี้คือ -

int fclose( FILE *fp );

fclose( ) ฟังก์ชันคืนค่าเป็นศูนย์เมื่อสำเร็จหรือ EOFอักขระพิเศษหากมีข้อผิดพลาดในการปิดไฟล์ ฟังก์ชันนี้จะล้างข้อมูลที่ค้างอยู่ในบัฟเฟอร์ไปยังไฟล์ปิดไฟล์และปล่อยหน่วยความจำที่ใช้สำหรับไฟล์ EOF คือค่าคงที่ที่กำหนดไว้ในไฟล์ส่วนหัวstdio.h.

มีฟังก์ชันต่างๆที่จัดเตรียมโดยไลบรารีมาตรฐาน C เพื่ออ่านและเขียนไฟล์ทีละอักขระหรือในรูปแบบของสตริงที่มีความยาวคงที่ ให้เราดูบางส่วนในส่วนถัดไป

การเขียนไฟล์

ด้านล่างนี้เป็นฟังก์ชันที่ง่ายที่สุดในการเขียนอักขระแต่ละตัวในสตรีม -

int fputc( int c, FILE *fp );

ฟังก์ชั่น fputc() เขียนค่าอักขระของอาร์กิวเมนต์ c ไปยังเอาต์พุตสตรีมที่อ้างอิงโดย fp. มันจะส่งกลับอักขระที่เขียนด้วยความสำเร็จมิฉะนั้นEOFหากมีข้อผิดพลาด คุณสามารถใช้ฟังก์ชันต่อไปนี้เพื่อเขียนสตริงที่สิ้นสุดด้วย null ลงในสตรีม -

int fputs( const char *s, FILE *fp );

ฟังก์ชั่น fputs() เขียนสตริง sลงในไฟล์ที่อ้างอิงโดย fp จะส่งคืนค่าที่ไม่เป็นลบต่อความสำเร็จมิฉะนั้นEOFจะถูกส่งคืนในกรณีที่เกิดข้อผิดพลาดใด ๆ คุณยังสามารถใช้ฟังก์ชันint fprintf(FILE *fp,const char *format, ...)เพื่อเขียนสตริงลงในไฟล์ ลองใช้ตัวอย่างต่อไปนี้ -

#include <stdio.h>

int main() {
   FILE *fp;

   fp = fopen("/tmp/test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);
}

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

การอ่านไฟล์

ให้ด้านล่างเป็นฟังก์ชั่นที่ง่ายที่สุดในการอ่านไฟล์ข้อความทีละอักขระ -

int fgetc( FILE * fp );

fgetc() ฟังก์ชันอ่านอักขระจากไฟล์อินพุตที่อ้างอิงโดย fp. ค่าที่ส่งคืนคืออักขระที่อ่านแล้ว หรือในกรณีที่มีข้อผิดพลาดจะส่งคืนEOF. ฟังก์ชันต่อไปนี้ช่วยให้คุณอ่านสตริงจากสตรีม -

char *fgets( char *buf, int n, FILE *fp );

ฟังก์ชั่น fgets() อ่านได้สูงสุด n - 1 อักขระจากอินพุตสตรีมที่อ้างอิงโดย fp. คัดลอกสตริงการอ่านลงในบัฟเฟอร์bufต่อท้ายก null อักขระเพื่อยุติสตริง

หากฟังก์ชันนี้พบอักขระขึ้นบรรทัดใหม่ '\ n' หรือ EOF ก่อนที่จะอ่านจำนวนอักขระสูงสุดฟังก์ชันนี้จะส่งคืนเฉพาะอักขระที่อ่านจนถึงจุดนั้นรวมทั้งอักขระบรรทัดใหม่ คุณยังสามารถใช้int fscanf(FILE *fp, const char *format, ...) เพื่ออ่านสตริงจากไฟล์ แต่จะหยุดอ่านหลังจากพบอักขระช่องว่างตัวแรก

#include <stdio.h>

main() {

   FILE *fp;
   char buff[255];

   fp = fopen("/tmp/test.txt", "r");
   fscanf(fp, "%s", buff);
   printf("1 : %s\n", buff );

   fgets(buff, 255, (FILE*)fp);
   printf("2: %s\n", buff );
   
   fgets(buff, 255, (FILE*)fp);
   printf("3: %s\n", buff );
   fclose(fp);
}

เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานจะอ่านไฟล์ที่สร้างในส่วนก่อนหน้าและสร้างผลลัพธ์ต่อไปนี้ -

1 : This
2 : is testing for fprintf...

3 : This is testing for fputs...

ลองวิเคราะห์สิ่งที่เกิดขึ้นที่นี่ ก่อนอื่นfscanf() วิธีการอ่าน Thisเพราะหลังจากนั้นก็พบกับช่องว่าง สายที่สองมีไว้สำหรับfgets()ซึ่งอ่านบรรทัดที่เหลือจนพบจุดสิ้นสุดของบรรทัด สุดท้ายสายสุดท้ายfgets() อ่านบรรทัดที่สองอย่างสมบูรณ์

ไฟล์ I / O ใน Java

Java มีชุดฟังก์ชันที่สมบูรณ์ยิ่งขึ้นเพื่อจัดการ File I / O สำหรับข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้เราขอแนะนำให้คุณตรวจสอบบทช่วยสอน Java ของเรา

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

import java.io.*;

public class DemoJava {
   public static void main(String []args) throws IOException {
      File file = new File("/tmp/java.txt");
      
      // Create a File
      file.createNewFile();
      
      //  Creates a FileWriter Object using file object
      FileWriter writer = new FileWriter(file); 
      
      // Writes the content to the file
      writer.write("This is testing for Java write...\n");
      writer.write("This is second line...\n");
      
      // Flush the memory and close the file
      writer.flush();
      writer.close();
      
      // Creates a FileReader Object
      FileReader reader = new FileReader(file); 
      char [] a = new char[100];
      
      // Read file content in the array
      reader.read(a);
      System.out.println( a );
      
      // Close the file
      reader.close();
   }
}

เมื่อโปรแกรมด้านบนถูกเรียกใช้งานจะให้ผลลัพธ์ดังนี้ -

This is testing for Java write...
This is second line...

ไฟล์ I / O ใน Python

โปรแกรมต่อไปนี้แสดงฟังก์ชันการทำงานเดียวกันในการเปิดไฟล์ใหม่เขียนเนื้อหาบางส่วนลงในไฟล์และสุดท้ายอ่านไฟล์เดียวกัน -

# Create a new file
fo = open("/tmp/python.txt", "w")

# Writes the content to the file
fo.write( "This is testing for Python write...\n");
fo.write( "This is second line...\n");

# Close the file
fo.close()

# Open existing file
fo = open("/tmp/python.txt", "r")

# Read file content in a variable
str = fo.read(100);
print str

# Close opened file
fo.close()

เมื่อดำเนินการโค้ดด้านบนจะให้ผลลัพธ์ดังนี้ -

This is testing for Python write...
This is second line...