การเขียนโปรแกรมคอมพิวเตอร์ - ไฟล์ 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...