500 likes | 647 Views
Laboratory 2. File Access. เกริ่นนำ. การเขียนโปรแกรมของเราที่ผ่านมาจะนำข้อมูลเข้าผ่านทางอุปกรณ์รับข้อมูลมาตรฐานหรือคีย์บอร์ดนั่นเอง และส่งผลจากการประมวลผลใดๆ ออกทางอุปกรณ์แสดงผลมาตรฐานหรือหน้าจอคอมพิวเตอร์
E N D
Laboratory 2 File Access
เกริ่นนำ • การเขียนโปรแกรมของเราที่ผ่านมาจะนำข้อมูลเข้าผ่านทางอุปกรณ์รับข้อมูลมาตรฐานหรือคีย์บอร์ดนั่นเอง และส่งผลจากการประมวลผลใดๆ ออกทางอุปกรณ์แสดงผลมาตรฐานหรือหน้าจอคอมพิวเตอร์ • อีกทางของรับข้อมูลและแสดงผลข้อมูล คือเราสามารถนำเข้าข้อมูลที่เก็บอยู่ในไฟล์ และแสดงผลของการดำเนินงานเก็บไว้ในไฟล์ • ซึ่งบทนี้เราจะเรียนคำสั่งภาษาซีเกี่ยวกับการติดต่อกับไฟล์
หลักการประมวลผลกับไฟล์หลักการประมวลผลกับไฟล์ C programming Operating System Buffer File pointer ไฟล์ที่เก็บในฮาร์ดดิสก์
บัฟเฟอร์ • บัฟเฟอร์คือพื้นที่ในหน่วยความจำหลัก (memory)ของเครื่องคอมพิวเตอร์ ซึ่งเตรียมไว้สำหรับประมวลผลกับไฟล์ ถ้าทำการประมวลผลกับหลายๆ ไฟล์ แต่ละไฟล์ก็จะมีบัฟเฟอร์เฉพาะสำหรับไฟล์นั้น ตัวอย่าง ถ้าเราประมวลผลกับไฟล์ชื่อ A, Bและ Cพื้นที่ในหน่วยความจำจะถูกกำหนดแยกเอาไว้ 3ส่วนด้วยกันเพื่อให้เป็นบัฟเฟอร์ของไฟล์ A, Bและ C
โครงสร้างของไฟล์ในภาษาซีโครงสร้างของไฟล์ในภาษาซี • จะเก็บข้อมูลในลักษณะเรียงต่อกันตั้งแต่ต้นจนจบไฟล์ไม่มีการแบ่งช่วงของข้อมูล ดังนั้นการที่จะเลือกระบุข้อมูลใดๆ ก็ตามภายในไฟล์ ต้องทราบตำแหน่งของข้อมูล ซึ่งตำแหน่งของข้อมูลภายในไฟล์สามารถทำได้โดยใช้ตัวชี้ตำแหน่งไฟล์ (file pointer) • ตัวชี้ตำแหน่งไฟล์จะเป็นตัวบอกตำแหน่งภายในไฟล์ โดยจะเป็นตัวบอกว่าขณะนั้นทำการประมวลผลอยู่ ณ ตำแหน่งใด ภายในไฟล์ ทำให้เราสามารถกำหนดได้ว่าจะอ่านหรือเขียนข้อมูลโดยเริ่มต้นจากจุดใดและไปสิ้นสุดที่ตำแหน่งใดในไฟล์
ชนิดของไฟล์ • เท็กซ์ไฟล์(Text File)เป็นไฟล์ที่เก็บข้อมูลในรูปแบบของรหัส asciiซึ่งก็คือเก็บเป็นตัวอักษร ทำให้เราสามารถอ่านข้อมูลในไฟล์ประเภทนี้ได้รู้เรื่อง โดยเท็กซ์ไฟล์จะมีการเปลี่ยนรหัสการขึ้นบรรทัดใหม่ ‘\n’เป็น Carriage returnหรือ Line feedตัวอย่างไฟล์ .c, .txt, .batหรือ .dat • ไบนารีไฟล์ (Binary File)เป็นไฟล์ที่เก็บข้อมูลในรูปแบบของเลขฐานสองซึ่งเป็นระบบเลขที่เครื่องคอมพิวเตอร์ใช้งาน ดังนั้นเราจึงไม่สามารถอ่านข้อมูลในไฟล์ประเภทนี้ได้รู้เรื่อง ตัวอย่างไฟล์ .exe, .com หรือ .obj
ตัวชี้ตำแหน่งไฟล์ (file pointer) • เมื่อทำการเปิดไฟล์ขึ้นมาแล้วตัวชี้ตำแหน่งไฟล์จะถูกสร้างขึ้นเพื่อชี้ตำแหน่งภายในไฟล์นั้น • คำสั่งที่ดำเนินการกับไฟล์จะต้องใช้ตัวชี้ตำแหน่งไฟล์ในการอ้างอิงจุดที่จะดำเนินการ อาทิ คำสั่งเขียน หรือ คำสั่งอ่าน
การสร้างตัวแปรพอยน์เตอร์ชนิดไฟล์การสร้างตัวแปรพอยน์เตอร์ชนิดไฟล์ • เราจำต้องมีตัวแปรพอยน์เตอร์ชนิดไฟล์เพื่อมารับค่าตัวชี้ตำแหน่งไฟล์ที่เกิดขึ้นเมื่อทำการเปิดไฟล์ • การกำหนดตัวแปรพอยน์เตอร์ชนิดไฟล์ FILE *ชื่อตัวแปรพอยน์เตอร์ชนิดไฟล์ ตัวอย่าง FILE *fp;
การเปิดไฟล์ • ในการดำเนินงานใดๆ กับไฟล์จะต้องกระทำสิ่งแรกก่อนคือ การเปิดไฟล์ • โดยตัวชี้ตำแหน่งไฟล์จะชี้ไปที่จุดเริ่มต้นของไฟล์ที่ทำการเปิดนั้น เมื่ออ่านหรือเขียนข้อมูลจากไฟล์ตัวชี้ตำแหน่งไฟล์ก็จะเลื่อนไปเรื่อยๆ ตามจำนวนของข้อมูล • การเปิดไฟล์เราใช้ฟังก์ชัน fopen( )ซึ่งเป็นไลบรารีฟังก์ชันที่อยู่ในไฟล์ stdlib.h
การเปิดไฟล์ • รูปแบบการใช้คำสั่งการเปิดไฟล์ ชื่อตัวแปรพอยน์เตอร์ชนิดไฟล์ = fopen(“ชื่อไฟล์”, “mode”) ผลลัพธ์ ถ้าการเปิดไฟล์เป็นผลสำเร็จ สิ่งที่ได้กลับมาก็คือ ตัวชี้ตำแหน่งไฟล์ ถ้าเกิดความผิดพลาด จะส่งค่า NULLกลับออกมาหมายความว่าไม่สามารถเปิดไฟล์นั้นได้
โหมดการเปิดไฟล์ รหัส ความหมาย r เปิดเพื่ออ่านไฟล์เก่า w เปิดเพื่อเขียนไฟล์ใหม่ หรือเขียนทับไฟล์เก่า a เปิดเพื่อเขียนต่อท้ายข้อมูลสุดท้ายของไฟล์เก่า r+ เปิดเพื่ออ่านหรือเขียนทับไฟล์เก่า w+ เปิดเพื่ออ่านหรือเขียนทับไฟล์เก่าหรือไฟล์ใหม่ a+ เปิดเพื่อเขียนต่อท้ายไฟล์เก่า หรือเขียนไฟล์ใหม่
ตัวอย่าง การเขียนคำสั่งเพื่อเปิดเท็กซ์ไฟล์ info.txt • ทำการอ่านเท็กซ์ไฟล์ ชื่อ info.txtสำหรับอ่านข้อมูลอย่างเดียว FILE *fp; fp = fopen(“info.txt”, “r”); FILE *pfile; pfile = fopen(“readme.txt”, “w”);
เพิ่มเติม • เราสามารถกำหนดโหมดให้ละเอียดกว่านี้ได้โดยระบุชนิดของไฟล์ลงไปด้วย • ถ้าเป็นเท็กซ์ไฟล์จะใช้ตัวอักษร t ต่อท้ายไฟล์ เช่น rt, wt, at หรือ r+t, w+t, a+t • ถ้าเป็นไบนารีไฟล์จะใช้ตัวอักษร b ต่อท้ายไฟล์ เช่น rb, wb, ab หรือ r+b, w+b, a+b
ตัวอย่างการเปิดไฟล์ FILE *fp; fp = fopen(“abc.txt”, “a”); fp = fopen(“ex5.obj”, “w”); fp = fopen(“song.dat”, “r+t”); fp = fopen(“prog.exe”, “a+b”); fp = fopen(“ch1.txt”, “w+”); เปิดเท็กซ์ไฟล์ abc.txtเพื่อเขียนข้อมูลต่อ เปิดไบนารีไฟล์ ex5.objเพื่อเขียนข้อมูลทับ เปิดเท็กซ์ไฟล์ song.datเพื่ออ่านข้อมูล เปิดไบนารีไฟล์ ex5.objเพื่ออ่านและเขียนทับ เปิดเท็กซ์ไฟล์ ch1.txtเพื่ออ่านและเขียนทับ
ตัวอย่างการเปิดไฟล์ อย่างที่ได้กล่าวไว้แล้ว การเปิดไฟล์จะส่งผลลัพธ์กลับออกมาเป็นตัวชี้ไฟล์ แต่ถ้าการเปิดไฟล์ไม่สำเร็จ ค่าที่ส่งกลับมาคือ NULLดังนั้นเราจึงควรตรวจสอบให้แน่ใจว่าทำการเปิดไฟล์สำเร็จก่อนการดำเนินการใดๆ กับไฟล์ #include <stdio.h> main(){ FILE *fp; fp = fopen(“box.txt”, “r”); if (fp == NULL) { printf(“Cannot open file\n”); exit(); } fclose(fp); }
ความผิดพลาดจากการเปิดไฟล์ความผิดพลาดจากการเปิดไฟล์ • ไฟล์ที่ต้องการเปิดไม่มีอยู่จริง ในกรณีนี้จะเกิดขึ้นกับโหมดเปิดเพื่ออ่านไฟล์ ส่วนโหมดอื่นๆ จะทำการสร้างไฟล์ใหม่หากไม่พบชื่อไฟล์ที่กำหนด • ระบุที่เก็บไฟล์ไม่ถูกต้อง ปรกติแล้วการระบุแต่ชื่อไฟล์เพียงอย่างเดียวจะหมายความว่าไฟล์ที่ระบุจะอยู่ ณ ไดเรกทอรี่ที่ตัวแปลภาษาซี แต่ถ้าเราต้องการเปิดไฟล์ ณ ไดเรกทอรี่อื่นให้ระบุ path เต็มๆ ได้ • การป้องกันไฟล์อันเกิดจากการให้สิทธิของผู้ดูแลระบบ
ตัวอย่างการกำหนดที่อยู่ของไฟล์ตัวอย่างการกำหนดที่อยู่ของไฟล์ FILE *fp; fp = fopen(“C:/my_c/abc.txt”, “r”); fp = fopen(“D:/JOBs/info.dat”, “a+”);
การปิดไฟล์ • เมื่อเราได้ทำการเปิดไฟล์แล้ว ควรจะทำการปิดไฟล์ทุกครั้ง เพื่อคืนพื้นที่หน่วยความจำที่ใช้เป็นบัฟเฟอร์ของไฟล์ให้กับเครื่อง นอกจากนี้เมื่อทำการปิดไฟล์ข้อมูลต่างๆ ที่คงค้างในบัฟเฟอร์จะถูกเขียนกลับลงในไฟล์ • รูปแบบคำสั่ง • ถ้าปิดไฟล์สำเร็จจะได้ค่าศูนย์ • ถ้าเปิดไฟล์ไม่สำเร็จจะได้ค่าไม่เท่ากับศูนย์ fclose(ชื่อตัวชี้ไฟล์)
ตัวอย่างการเปิดและปิดไฟล์ตัวอย่างการเปิดและปิดไฟล์ #include <stdio.h> main(){ FILE *fp; int a; fp = fopen(“c:/file/song.txt”, “r”); if (fp == NULL) { printf(“Cannot open file\n”); exit(); } printf(“Can open file\n”); a = fclose(fp); if(!a) { printf(“Close file\n”); } } Can open file Close file
การอ่านข้อมูลจากไฟล์ • ข้อมูลภายในไฟล์จะถูกอ่านเริ่มต้นตั้งแต่ต้นไฟล์ โดยมีตัวชี้ตำแหน่งไฟล์ชี้ไปเรื่อยๆ จนจบไฟล์ • เราทำการอ่านข้อมูลของไฟล์จากบัฟเฟอร์ มิใช่จากไฟล์จริงๆ • เราจะทำการอ่านไฟล์ที่ทำการเปิดจากโหมด r หรือ r+ เท่านั้น • คำสั่งในการอ่านไฟล์ มีหลายคำสั่ง อาทิ getc( ), fgetc( ), fgets( )
อ่านข้อมูลทีละอักขระ ด้วย getc( ) • ฟังก์ชัน getc( ) ใช้ในการอ่านข้อมูลชนิดอักขระจากไฟล์ โดยจะอ่านออกมาทีละ 1 อักขระเท่านั้น • รูปแบบการเขียนคำสั่ง ตัวแปรชนิดอักขระ= getc(ตัวชี้ไฟล์) ตัวอย่าง FILE *fp; char ch; fp = fopen(“C:/my_c/abc.txt”, “r”); ch = getc(fp);
ICT, Silpakron U. ตัวอย่างการใช้ getc( ) #include <stdio.h> main(){ FILE *fp; char ch; fp = fopen(“info.txt”, “r”); if (fp == NULL) { printf(“Cannot open file\n”); exit(); } printf(“Can open file\n”); ch = getc(fp); printf(“%c”,ch); fclose(fp); } Can open file I
การใช้งานจริงของการอ่านไฟล์การใช้งานจริงของการอ่านไฟล์ • ถ้าต้องการอ่านข้อมูลจนจบไฟล์โดยใช้ฟังก์ชัน getc() ต้องมีการวนลูปอ่านทีละตัวอักษรจนหมดไฟล์ • ในกรณีของเท็กซ์ไฟล์ เรามีอักษรพิเศษเมื่อตัวชี้ไฟล์ชี้ไปถึงจุดสิ้นสุดไฟล์ คือ EOF เพื่อบ่งบอกว่าจบไฟล์ เราสามารถอ่านอักขระมีทีละอักขระแล้วมาเปรียบเทียบว่าเป็น EOF หรือไม่ ถ้าอักษรนั้นเท่ากับ EOF ก็แสดงว่าจบไฟล์นี้แล้ว
ICT, Silpakron U. ตัวอย่างการใช้ getc( ) #include <stdio.h> main(){ FILE *fp; char ch; fp = fopen(“info.txt”, “r”); if (fp == NULL){ printf(“Cannot open file\n”); exit(); } printf(“Can open file\n”); ch = getc(fp); while (ch != EOF){ printf(“%c”,ch); ch = getc(fp); } fclose(fp); } Can open file ICT, Silpakorn U.
การหาจุดสิ้นสุดไฟล์ (End of File) • เท็กซ์ไฟล์ เมื่ออ่านข้อมูลจนจบไฟล์แล้วจะให้ค่า EOF ออกมาเพื่อบอกว่าจุดสิ้นสุดไฟล์ • ไบนารีไฟล์ เมื่ออ่านข้อมูลจนจบไฟล์ก็ไม่ให้ค่า EOF ออกมาเหมือนเท็กซ์ไฟล์ • การตรวจสอบจุดจบของไบนารีไฟล์ใช้ฟังก์ชัน feof() • ฟังก์ชัน feof()สามารถใช้ได้ทั้งเท็กซ์ไฟล์และไบนารีไฟล์
ฟังก์ชัน feof() • เป็นฟังก์ชันเพื่อใช้ตรวจสอบจุดสิ้นสุดไฟล์ โดยสามารถใช้ได้ทั้งเท็กซ์ไฟล์และไบนารีไฟล์ • รูปแบบการเขียนคำสั่ง • ถ้ายังไม่จบไฟล์ค่าที่ได้จากฟังก์ชันจะเป็นศูนย์ หรือเท็จ • ถ้าจบไฟล์ค่าที่ได้จากฟังก์ชันจะไม่เท่ากับศูนย์ หรือจริง ตัวแปรตัวเลข= feof(ตัวชี้ไฟล์) if ( !feof(ตัวชี้ไฟล์) ) { . . . }
ICT, Silpakron U. ตัวอย่างการใช้ feof( ) #include <stdio.h> main(){ FILE *fp; char ch; fp = fopen(“info.txt”, “r”); if (fp == NULL){ printf(“Cannot open file\n”); exit(); } printf(“Can open file\n”); while (!feof(fp)){ printf(“%c”,ch); ch = getc(fp); } fclose(fp); } Can open file ICT, Silpakorn U.
อ่านข้อมูลทีละอักขระ ด้วย fgetc( ) • ฟังก์ชัน fgetc( )ใช้ในการอ่านข้อมูลชนิดอักขระจากไฟล์ เช่นเดียวกับฟังก์ชัน getc( ) • รูปแบบการเขียนคำสั่ง ตัวแปรชนิดอักขระ= fgetc(ตัวชี้ไฟล์) ตัวอย่าง FILE *fp; char ch; fp = fopen(“C:/my_c/abc.txt”, “r”); ch = fgetc(fp);
ICT, Silpakron U. ตัวอย่างการใช้ fgetc() และ feof() #include <stdio.h> main(){ FILE *fp; char ch; fp = fopen(“info.txt”, “r”); if (fp == NULL){ printf(“Cannot open file\n”); exit(); } printf(“Can open file\n”); while (!feof(fp)){ printf(“%c”,ch); ch = fgetc(fp); } fclose(fp); } Can open file ICT, Silpakorn U.
อ่านข้อมูลทีละข้อความด้วย fgets() • ฟังก์ชัน fgets() ใช้ในกรณีที่ต้องการอ่านข้อมูลจากไฟล์ออกมาต่อเนื่องกันเป็นข้อความ โดยสามารถกำหนดความยาวของข้อความได้ • รูปแบบของการเขียนคำสั่ง fgets(ตัวแปรชนิดอักขระ, จำนวนตัวอักษร, ตัวชี้ไฟล์) หมายเหตุ จำนวนตัวอักษรนี้จะถูกลบออก 1 ตัวอักษรเพื่อใส่ตัวอักษรจบข้อความ ‘\0’
Silpakron U. ICT Petchaburi ตัวอย่างการใช้ fgets( ) #include <stdio.h> main(){ FILE *fp; char ch[50]; fp = fopen(“info.txt”, “r”); if (fp == NULL){ printf(“Cannot open file\n”); exit(); } printf(“Can open file\n”); fgets(ch,8,fp); fclose(fp); printf(“%s”,ch); } Can open file Silpakr
Silpakron U. ICT Petchaburi ตัวอย่างการใช้ fgets( ) #include <stdio.h> #define MAX 100; main(){ FILE *fp; char ch[MAX]; fp = fopen(“info.txt”, “r”); if (fp == NULL){ printf(“Cannot open file\n”); exit(); } printf(“Can open file\n”); fgets(ch,MAX,fp); fclose(fp); printf(“%s”,ch); } Can open file Silpakron U.
Silpakron U. ICT Petchaburi ตัวอย่างการใช้ fgets() และ feof() #include <stdio.h> #define MAX 100; main(){ FILE *fp; char ch[MAX]; fp = fopen(“info.txt”, “r”); if (fp == NULL){ printf(“Cannot open file\n”); exit(); } printf(“Can open file\n”); while(!feof(fp)){ fgets(ch,MAX,fp); printf(“%s”,ch); } fclose(fp); } Can open file Silpakron U. ICT Petchaburi
อ่านข้อมูลด้วย fscanf() • เราสามารถอ่านข้อมูลจากไฟล์เป็นข้อมูลชนิดอื่นๆ ได้ นอกเหนือจากตัวอักษรหรือข้อความ เช่นข้อมูลตัวเลข เป็นต้น • รูปแบบการเขียนคำสั่ง fscanf(ตัวชี้ไฟล์, “รูปแบบ”, &ตัวแปร) หมายเหตุ “รูปแบบ” จะมีลักษณะคล้ายกับของคำสั่ง scanf
Silpakron U. ICT Petchaburi การอ่านข้อมูลชนิดข้อความจากไฟล์ #include <stdio.h> main(){ FILE *fp; char str[20]; fp = fopen(“info.txt”, “r”); if (fp == NULL){ printf(“Cannot open file\n”); exit(); } while(!feof(fp)){ fscanf(fp, “%s”,str); printf(“%s\n”,str); } fclose(fp); } Silpakron U. ICT Petchaburi
Silpakron U. ICT Petchaburi การอ่านข้อมูลชนิดอักขระจากไฟล์ #include <stdio.h> main(){ FILE *fp; char ch; int i; fp = fopen(“info.txt”, “r”); if (fp == NULL){ printf(“Cannot open file\n”); exit(); } for (i=0;i<5;i++){ fscanf(fp, “%c”,&ch); printf(“%c\n”,ch); } fclose(fp); } S i l p
11 3 2002 30 5 2003 การอ่านข้อมูลชนิดตัวเลขจากไฟล์ #include <stdio.h> main(){ FILE *fp; int day,month,year; fp = fopen(“info.txt”, “r”); if (fp == NULL){ printf(“Cannot open file\n”); exit(); } fscanf(fp, “%d %d”,&day,&month); printf(“%d\n”,day); printf(“%d\n”,month); fclose(fp); } 11 3
อ่านข้อมูลด้วย fread() • ฟังก์ชัน fread ใช้อ่านข้อมูลเป็นเรคคอร์ดหรือเป็นชุด ซึ่งขนาดของเรคคอร์ดหรือชุดข้อมูลเราเป็นผู้กำหนดขึ้นเองในหน่วยไบต • รูปแบบการเขียนคำสั่ง fread(ptr, size, number, fp) ptr คือค่าตำแหน่งในหน่วยความจำ ซึ่งจะนำข้อมูลที่อ่านได้มาเก็บไว้ size คือขนาดของเรคคอร์ดหรือชุดข้อมูล โดยมีหน่วยเป็นไบต์ number คือจำนวนเร็คคอร์ดหรือชุดข้อมูลที่จะอ่าน fp คือตัวชี้ตำแหน่งไฟล์ที่ต้องการอ่าน
11 3 2002 30 5 2003 ตัวอย่างการใช้ fread( ) #include <stdio.h> main(){ FILE *fp; char str[30]; fp = fopen(“info.txt”, “r”); if (fp == NULL){ printf(“Cannot open file\n”); exit(); } fread(str, sizeof(str), 1, fp); printf(“%s\n”,str); fclose(fp); } 11 3 2002
การเขียนใส่ลงในไฟล์ • การเขียนหรือบันทึกข้อมูลลงไฟล์ เราจะต้องทำการเปิดไฟล์เพื่อเขียนได้แก่ w, w+, a, a+ และ r+ • โดยที่ข้อมูลที่เราดำเนินการจะถูกเขียนลงบนบัฟเฟอร์ก่อน ในระหว่างที่เขียนข้อมูล ตัวชี้ไฟล์จะเลื่อนตำแหน่งชี้ไปเรื่อยๆ ตามปริมาณการเขียน เมื่อบัฟเฟอร์เต็มหรือทำการปิดไฟล์ข้อมูลเหล่านั้นจึงจะถูกเขียนลงไปในไฟล์จริงๆ ที่เราอ้างถึงตอนเปิดไฟล์
เขียนข้อมูลด้วย putc() • เป็นฟังก์ชันที่ใช้สำหรับเขียนข้อมูลประเภทตัวอักขระลงในไฟล์ โดยเขียนลงในไฟล์ครั้งละ 1 ตัวอักษรเท่านั้น • รูปแบบการเขียนคำสั่ง putc( ตัวแปรหรือค่าอักขระ, ตัวชี้ตำแหน่งไฟล์) ตัวอย่าง FILE *fp; char ch = ‘Z’; fp = fopen(“C:/my_c/abc.txt”, “w”); putc(‘A’,fp); putc(ch,fp);
ABCDEF ตัวอย่างการใช้ putc( ) #include <stdio.h> main(){ FILE *fp; char ch; fp = fopen(“info.txt”, “w”); printf(“wait . . .”); for(ch=‘A’,ch<=‘F’;ch++) { putc(ch, fp); } printf(“finish my task\n”); fclose(fp); } Wait . . . Finish my task
เขียนข้อมูลด้วย fputc() • ใช้เขียนอักขระลงไฟล์เช่นเดียวกับฟังก์ชัน putc() • รูปแบบการเขียนคำสั่ง fputc( ตัวแปรหรือค่าอักขระ, ตัวชี้ตำแหน่งไฟล์) ตัวอย่าง FILE *fp; char ch = ‘Z’; fp = fopen(“C:/my_c/abc.txt”, “w”); fputc(‘A’,fp); fputc(ch,fp);
เขียนข้อมูลด้วย fputs() • เป็นฟังก์ชันใช้สำหรับเขียนข้อความลงในไฟล์ • รูปแบบการเขียนคำสั่ง fputs( ตัวแปรข้อความหรือข้อความ, ตัวชี้ตำแหน่งไฟล์) ตัวอย่าง FILE *fp; char str[10] = “sawasdee”; fp = fopen(“C:/my_c/abc.txt”, “w”); fputs(“ALOHA ”,fp); fputs( str, fp );
Name1 Name2 Name3 Name4 Name5 ตัวอย่างการใช้ fputs( ) #include <stdio.h> main(){ FILE *fp; int count = 0; char name[50]; if ((fp = fopen(“name.txt”, “a+”))==NULL){ printf(“can not open file\n”); exit(); } while(count<5){ printf(“Enter your name:”); gets(name); fputs(name,fp); count++; } fclose(fp); }
เขียนข้อมูลด้วย fprintf() • นอกเหนือจากข้อมูลที่เป็นข้อความที่เราสามารถเขียนลงไฟล์ได้แล้วเราก็สามารถเขียนข้อมูลชนิดอื่นๆ ลงไฟล์ได้เช่นกัน • รูปแบบการเขียนคำสั่ง fprintf(ตัวชี้ตำแหน่งไฟล์, ตัวควบคุม, ตัวแปรข้อความหรือข้อความ) หมายเหตุ “ตัวควบคุม” จะมีลักษณะคล้ายกับของคำสั่ง printf
Name:Awirut Nareerat School:Wachirawut Age:10 Sex:M ตัวอย่างการใช้ fprintf( ) #include <stdio.h> main(){ FILE *fp; char name[30]=“Awirut Nareerat”; int age = 10; char sex = ‘M’; fp = fopen(“A.txt”, “a”); fprintf(fp,“Name:%s\n”,name); fprintf(fp,“School:Wachirawut\n”); fprintf(fp,“Age:%d\n”,age); fprintf(fp,“sex:%c\n”,sex); fclose(fp); }
เขียนข้อมูลด้วย fwrite() • ฟังก์ชัน fwrite ใช้เขียนข้อมูลเป็นเรคคอร์ดหรือเป็นชุด ซึ่งขนาดของเรคคอร์ดหรือชุดข้อมูลเราเป็นผู้กำหนดขึ้นเองในหน่วยไบต • รูปแบบการเขียนคำสั่ง fwrite(ptr, size, number, fp) ptr คือค่าตำแหน่งในหน่วยความจำ ซึ่งจะนำข้อมูลที่อ่านได้มาเก็บไว้ size คือขนาดของเรคคอร์ดหรือชุดข้อมูล โดยมีหน่วยเป็นไบต์ number คือจำนวนเร็คคอร์ดหรือชุดข้อมูลที่จะอ่าน fp คือตัวชี้ตำแหน่งไฟล์ที่ต้องการอ่าน
The c is easy. ตัวอย่างการใช้ fwrite( ) #include <stdio.h> main(){ FILE *fp; char str[]=“The c is easy.”; char temp[30]; fp = fopen(“new.txt”, “w”); fwrite(str, sizeof(str), 1, fp); fp = freopen(“new.txt”, “r”); while(!feof(fp)){ fread(temp,sizeof(str),1,fp); printf(“%s”,temp); } fclose(fp); } The c is easy