Transcript include

Laboratory 2
File Access
เกริ่ นนำ
• การเขียนโปรแกรมของเราที่ผา่ นมาจะนาข้อมูลเข้าผ่านทางอุปกรณ์
รับข้อมูลมาตรฐานหรื อคียบ์ อร์ดนัน่ เอง และส่ งผลจากการ
ประมวลผลใดๆ ออกทางอุปกรณ์แสดงผลมาตรฐานหรื อหน้า
จอคอมพิวเตอร์
• อีกทางของรับข้อมูลและแสดงผลข้อมูล คือเราสามารถนาเข้าข้อมูล
ที่เก็บอยูใ่ นไฟล์ และแสดงผลของการดาเนินงานเก็บไว้ในไฟล์
• ซึ่งบทนี้เราจะเรี ยนคาสัง่ ภาษาซีเกี่ยวกับการติดต่อกับไฟล์
2
หลักกำรประมวลผลกับไฟล์
C programming
Operating System
Buffer
File pointer
ไฟล์ที่เก็บในฮำร์ดดิสก์
3
บัฟเฟอร์
• บัฟเฟอร์คือพื้นที่ในหน่วยความจาหลัก (memory) ของเครื่ อง
คอมพิวเตอร์ ซึ่งเตรี ยมไว้สาหรับประมวลผลกับไฟล์ ถ้าทาการ
ประมวลผลกับหลายๆ ไฟล์ แต่ละไฟล์กจ็ ะมีบฟั เฟอร์เฉพาะสาหรับ
ไฟล์น้ นั
ตัวอย่ำง
ถ้ำเรำประมวลผลกับไฟล์ชื่อ A, B และ C พื้นที่ในหน่วยควำมจำจะถูก
กำหนดแยกเอำไว้ 3 ส่ วนด้วยกันเพื่อให้เป็ นบัฟเฟอร์ของไฟล์ A, B
และ C
4
โครงสร้ำงของไฟล์ในภำษำซี
• จะเก็บข้อมูลในลักษณะเรี ยงต่อกันตั้งแต่ตน้ จนจบไฟล์ไม่มีการแบ่ง
ช่วงของข้อมูล ดังนั้นการที่จะเลือกระบุขอ้ มูลใดๆ ก็ตามภายในไฟล์
ต้องทราบตาแหน่งของข้อมูล ซึ่งตาแหน่งของข้อมูลภายในไฟล์
สามารถทาได้โดยใช้ตวั ชี้ตาแหน่งไฟล์ (file pointer)
• ตัวชี้ตาแหน่งไฟล์จะเป็ นตัวบอกตาแหน่งภายในไฟล์ โดยจะเป็ นตัว
บอกว่าขณะนั้นทาการประมวลผลอยู่ ณ ตาแหน่งใด ภายในไฟล์ ทา
ให้เราสามารถกาหนดได้วา่ จะอ่านหรื อเขียนข้อมูลโดยเริ่ มต้นจาก
จุดใดและไปสิ้ นสุ ดที่ตาแหน่งใดในไฟล์
5
ชนิดของไฟล์
• เท็กซ์ไฟล์ (Text File) เป็ นไฟล์ที่เก็บข้อมูลในรู ปแบบของรหัส
ascii ซึ่ งก็คือเก็บเป็ นตัวอักษร ทาให้เราสามารถอ่านข้อมูลในไฟล์
ประเภทนี้ได้รู้เรื่ อง โดยเท็กซ์ไฟล์จะมีการเปลี่ยนรหัสการขึ้น
บรรทัดใหม่ ‘\n’ เป็ น Carriage return หรื อ Line feed
ตัวอย่างไฟล์ .c, .txt, .bat หรื อ .dat
• ไบนารี ไฟล์ (Binary File) เป็ นไฟล์ที่เก็บข้อมูลในรู ปแบบของ
เลขฐานสองซึ่งเป็ นระบบเลขที่เครื่ องคอมพิวเตอร์ใช้งาน ดังนั้นเรา
จึงไม่สามารถอ่านข้อมูลในไฟล์ประเภทนี้ได้รู้เรื่ อง ตัวอย่างไฟล์
.exe, .com หรื อ .obj
6
ตัวชี้ตำแหน่งไฟล์ (file pointer)
• เมื่อทาการเปิ ดไฟล์ข้ ึนมาแล้วตัวชี้ตาแหน่งไฟล์จะถูกสร้างขึ้นเพื่อชี้
ตาแหน่งภายในไฟล์น้ นั
• คาสัง่ ที่ดาเนินการกับไฟล์จะต้องใช้ตวั ชี้ตาแหน่งไฟล์ในการอ้างอิง
จุดที่จะดาเนินการ อาทิ คาสัง่ เขียน หรื อ คาสัง่ อ่าน
7
กำรสร้ำงตัวแปรพอยน์เตอร์ชนิดไฟล์
• เราจาต้องมีตวั แปรพอยน์เตอร์ชนิดไฟล์เพื่อมารับค่าตัวชี้ตาแหน่ง
ไฟล์ที่เกิดขึ้นเมื่อทาการเปิ ดไฟล์
• การกาหนดตัวแปรพอยน์เตอร์ชนิดไฟล์
FILE *ชื่อตัวแปรพอยน์เตอร์ ชนิ ดไฟล์
ตัวอย่ำง
FILE *fp;
8
กำรเปิ ดไฟล์
• ในการดาเนินงานใดๆ กับไฟล์จะต้องกระทาสิ่ งแรกก่อนคือ การเปิ ด
ไฟล์
• โดยตัวชี้ตาแหน่งไฟล์จะชี้ไปที่จุดเริ่ มต้นของไฟล์ที่ทาการเปิ ดนั้น
เมื่ออ่านหรื อเขียนข้อมูลจากไฟล์ตวั ชี้ตาแหน่งไฟล์กจ็ ะเลื่อนไป
เรื่ อยๆ ตามจานวนของข้อมูล
• การเปิ ดไฟล์เราใช้ฟังก์ชนั fopen( ) ซึ่งเป็ นไลบรารี ฟังก์ชนั ที่อยู่
ในไฟล์ stdlib.h
9
กำรเปิ ดไฟล์
• รู ปแบบการใช้คาสัง่ การเปิ ดไฟล์
ชื่อตัวแปรพอยน์เตอร์ชนิดไฟล์ = fopen(“ชื่อไฟล์”, “mode”)
ผลลัพธ์
ถ้ำกำรเปิ ดไฟล์เป็ นผลสำเร็ จ สิ่ งที่ได้กลับมำก็คือ ตัวชี้ตำแหน่งไฟล์
ถ้ำเกิดควำมผิดพลำด จะส่ งค่ำ NULL กลับออกมำหมำยควำมว่ำไม่
สำมำรถเปิ ดไฟล์น้ นั ได้
10
โหมดกำรเปิ ดไฟล์
รหัส
r
w
a
r+
w+
a+
ควำมหมำย
เปิ ดเพื่ออ่ำนไฟล์เก่ำ
เปิ ดเพื่อเขียนไฟล์ใหม่ หรื อเขียนทับไฟล์เก่ำ
เปิ ดเพื่อเขียนต่อท้ำยข้อมูลสุ ดท้ำยของไฟล์เก่ำ
เปิ ดเพื่ออ่ำนหรื อเขียนทับไฟล์เก่ำ
เปิ ดเพื่ออ่ำนหรื อเขียนทับไฟล์เก่ำหรื อไฟล์ใหม่
เปิ ดเพื่อเขียนต่อท้ำยไฟล์เก่ำ หรื อเขียนไฟล์ใหม่
11
ตัวอย่ำง กำรเขียนคำสัง่ เพื่อเปิ ดเท็กซ์ไฟล์
info.txt
• ทาการอ่านเท็กซ์ไฟล์ ชื่อ info.txt สาหรับอ่านข้อมูลอย่างเดียว
FILE *fp;
fp = fopen(“info.txt”, “r”);
FILE *pfile;
pfile = fopen(“readme.txt”, “w”);
12
เพิม่ เติม
• เราสามารถกาหนดโหมดให้ละเอียดกว่านี้ได้โดยระบุชนิดของไฟล์
ลงไปด้วย
– ถ้าเป็ นเท็กซ์ไฟล์จะใช้ตวั อักษร t ต่อท้ายไฟล์ เช่น rt, wt, at หรื อ
r+t, w+t, a+t
– ถ้าเป็ นไบนารี ไฟล์จะใช้ตวั อักษร b ต่อท้ายไฟล์ เช่น rb, wb, ab
หรื อ r+b, w+b, a+b
13
ตัวอย่ำงกำรเปิ ดไฟล์
FILE *fp;
fp = fopen(“abc.txt”, “a”); เปิ ดเท็กซ์ไฟล์ abc.txt เพื่อเขียนข้อมูลต่อ
fp = fopen(“ex5.obj”, “w”); เปิ ดไบนำรี ไฟล์ ex5.obj เพื่อเขียนข้อมูลทับ
fp = fopen(“song.dat”, “r+t”); เปิ ดเท็กซ์ไฟล์ song.dat เพื่ออ่ำนข้อมูล
fp = fopen(“prog.exe”, “a+b”); เปิ ดไบนำรี ไฟล์ ex5.obj เพื่ออ่ำนและเขียนทับ
fp = fopen(“ch1.txt”, “w+”); เปิ ดเท็กซ์ไฟล์ ch1.txt เพื่ออ่ำนและเขียนทับ
14
ตัวอย่ำงกำรเปิ ดไฟล์
อย่ำงที่ได้กล่ำวไว้แล้ว กำรเปิ ดไฟล์
จะส่ งผลลัพธ์กลับออกมำเป็ นตัวชี้
ไฟล์ แต่ถำ้ กำรเปิ ดไฟล์ไม่สำเร็ จ
ค่ำที่ส่งกลับมำคือ NULL ดังนั้น
เรำจึงควรตรวจสอบให้แน่ใจว่ำทำ
กำรเปิ ดไฟล์สำเร็ จก่อนกำร
ดำเนินกำรใดๆ กับไฟล์
#include <stdio.h>
main(){
FILE *fp;
fp = fopen(“box.txt”, “r”);
if (fp == NULL)
{
printf(“Cannot open file\n”);
exit();
}
fclose(fp);
}
15
ควำมผิดพลำดจำกกำรเปิ ดไฟล์
• ไฟล์ที่ตอ้ งการเปิ ดไม่มีอยูจ่ ริ ง ในกรณี น้ ีจะเกิดขึ้นกับโหมดเปิ ดเพื่อ
อ่านไฟล์ ส่ วนโหมดอื่นๆ จะทาการสร้างไฟล์ใหม่หากไม่พบชื่อ
ไฟล์ที่กาหนด
• ระบุที่เก็บไฟล์ไม่ถูกต้อง ปรกติแล้วการระบุแต่ชื่อไฟล์เพียงอย่าง
เดียวจะหมายความว่าไฟล์ที่ระบุจะอยู่ ณ ไดเรกทอรี่ ที่ตวั แปล
ภาษาซี แต่ถา้ เราต้องการเปิ ดไฟล์ ณ ไดเรกทอรี่ อื่นให้ระบุ path
เต็มๆ ได้
• การป้ องกันไฟล์อนั เกิดจากการให้สิทธิของผูด้ ูแลระบบ
16
ตัวอย่ำงกำรกำหนดที่อยูข่ องไฟล์
FILE *fp;
fp = fopen(“C:/my_c/abc.txt”, “r”);
fp = fopen(“D:/JOBs/info.dat”, “a+”);
17
กำรปิ ดไฟล์
• เมื่อเราได้ทาการเปิ ดไฟล์แล้ว ควรจะทาการปิ ดไฟล์ทุกครั้ง เพื่อคืน
พื้นที่หน่วยความจาที่ใช้เป็ นบัฟเฟอร์ของไฟล์ให้กบั เครื่ อง
นอกจากนี้เมื่อทาการปิ ดไฟล์ขอ้ มูลต่างๆ ที่คงค้างในบัฟเฟอร์จะถูก
เขียนกลับลงในไฟล์
• รู ปแบบคาสัง่
fclose(ชื่อตัวชี้ไฟล์)
– ถ้าปิ ดไฟล์สาเร็ จจะได้ค่าศูนย์
– ถ้าเปิ ดไฟล์ไม่สาเร็ จจะได้ค่าไม่เท่ากับศูนย์
18
ตัวอย่ำงกำรเปิ ดและปิ ดไฟล์
#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
19
กำรอ่ำนข้อมูลจำกไฟล์
• ข้อมูลภายในไฟล์จะถูกอ่านเริ่ มต้นตั้งแต่ตน้ ไฟล์ โดยมีตวั ชี้ตาแหน่ง
ไฟล์ช้ ีไปเรื่ อยๆ จนจบไฟล์
• เราทาการอ่านข้อมูลของไฟล์จากบัฟเฟอร์ มิใช่จากไฟล์จริ งๆ
• เราจะทาการอ่านไฟล์ที่ทาการเปิ ดจากโหมด r หรื อ r+ เท่านั้น
• คาสัง่ ในการอ่านไฟล์ มีหลายคาสัง่ อาทิ getc( ), fgetc( ),
fgets( )
20
อ่ำนข้อมูลทีละอักขระ ด้วย getc( )
• ฟังก์ชนั getc( ) ใช้ในการอ่านข้อมูลชนิ ดอักขระจากไฟล์ โดยจะอ่าน
ออกมาทีละ 1 อักขระเท่านั้น
• รู ปแบบการเขียนคาสั่ง
ตัวแปรชนิดอักขระ = getc(ตัวชี้ไฟล์)
ตัวอย่ำง
FILE *fp;
char ch;
fp = fopen(“C:/my_c/abc.txt”, “r”);
ch = getc(fp);
21
ตัวอย่ำงกำรใช้ 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);
}
ICT,
Silpakron U.
Can open file
I
22
กำรใช้งำนจริ งของกำรอ่ำนไฟล์
• ถ้าต้องการอ่านข้อมูลจนจบไฟล์โดยใช้ฟังก์ชนั getc() ต้องมีการ
วนลูปอ่านทีละตัวอักษรจนหมดไฟล์
• ในกรณี ของเท็กซ์ไฟล์ เรามีอกั ษรพิเศษเมื่อตัวชี้ไฟล์ช้ ีไปถึง
จุดสิ้ นสุ ดไฟล์ คือ EOF เพื่อบ่งบอกว่าจบไฟล์ เราสามารถอ่าน
อักขระมีทีละอักขระแล้วมาเปรี ยบเทียบว่าเป็ น EOF หรื อไม่ ถ้า
อักษรนั้นเท่ากับ EOF ก็แสดงว่าจบไฟล์น้ ีแล้ว
23
ตัวอย่ำงกำรใช้ 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);
}
ICT,
Silpakron U.
Can open file
ICT,
Silpakorn U.
24
กำรหำจุดสิ้ นสุ ดไฟล์ (End of File)
• เท็กซ์ไฟล์ เมื่ออ่านข้อมูลจนจบไฟล์แล้วจะให้ค่า EOF ออกมา
เพื่อบอกว่าจุดสิ้ นสุ ดไฟล์
• ไบนารี ไฟล์ เมื่ออ่านข้อมูลจนจบไฟล์กไ็ ม่ให้ค่า EOF ออกมา
เหมือนเท็กซ์ไฟล์
• การตรวจสอบจุดจบของไบนารี ไฟล์ใช้ฟังก์ชนั feof()
• ฟังก์ชนั feof() สามารถใช้ได้ท้ งั เท็กซ์ไฟล์และไบนารี ไฟล์
25
ฟังก์ชนั feof()
• เป็ นฟังก์ชนั เพื่อใช้ตรวจสอบจุดสิ้ นสุ ดไฟล์ โดยสามารถใช้ได้ท้ งั
เท็กซ์ไฟล์และไบนารี ไฟล์
• รู ปแบบการเขียนคาสัง่
ตัวแปรตัวเลข = feof(ตัวชี้ไฟล์)
if ( !feof(ตัวชี้ไฟล์) ) { . . . }
– ถ้ายังไม่จบไฟล์ค่าที่ได้จากฟั งก์ชนั จะเป็ นศูนย์ หรื อเท็จ
– ถ้าจบไฟล์ค่าที่ได้จากฟั งก์ชนั จะไม่เท่ากับศูนย์ หรื อจริ ง
26
ตัวอย่ำงกำรใช้ 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);
}
ICT,
Silpakron U.
Can open file
ICT,
Silpakorn U.
27
อ่ำนข้อมูลทีละอักขระ ด้วย fgetc( )
• ฟังก์ชนั fgetc( ) ใช้ในการอ่านข้อมูลชนิดอักขระจากไฟล์
เช่นเดียวกับฟังก์ชนั getc( )
• รู ปแบบการเขียนคาสัง่
ตัวแปรชนิดอักขระ = fgetc(ตัวชี้ไฟล์)
ตัวอย่ำง
FILE *fp;
char ch;
fp = fopen(“C:/my_c/abc.txt”, “r”);
ch = fgetc(fp);
28
ตัวอย่ำงกำรใช้ 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);
}
ICT,
Silpakron U.
Can open file
ICT,
Silpakorn U.
29
อ่ำนข้อมูลทีละข้อควำมด้วย fgets()
• ฟังก์ชนั fgets() ใช้ในกรณี ที่ตอ้ งการอ่านข้อมูลจากไฟล์ออกมา
ต่อเนื่องกันเป็ นข้อความ โดยสามารถกาหนดความยาวของข้อความ
ได้
• รู ปแบบของการเขียนคาสัง่
fgets(ตัวแปรชนิดอักขระ, จำนวนตัวอักษร, ตัวชี้ไฟล์)
หมำยเหตุ จำนวนตัวอักษรนี้จะถูกลบออก 1 ตัวอักษรเพื่อใส่ ตวั อักษร
จบข้อควำม ‘\0’
30
ตัวอย่ำงกำรใช้ 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);
}
Silpakron U.
ICT Petchaburi
Can open file
Silpakr
31
ตัวอย่ำงกำรใช้ 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);
}
Silpakron U.
ICT Petchaburi
Can open file
Silpakron U.
32
ตัวอย่ำงกำรใช้ 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);
}
Silpakron U.
ICT Petchaburi
Can open file
Silpakron U.
ICT Petchaburi
33
อ่ำนข้อมูลด้วย fscanf()
• เราสามารถอ่านข้อมูลจากไฟล์เป็ นข้อมูลชนิดอื่นๆ ได้
นอกเหนือจากตัวอักษรหรื อข้อความ เช่นข้อมูลตัวเลข เป็ นต้น
• รู ปแบบการเขียนคาสัง่
fscanf(ตัวชี้ไฟล์, “รู ปแบบ”, &ตัวแปร)
หมำยเหตุ “รู ปแบบ” จะมีลกั ษณะคล้ำยกับของคำสัง่ scanf
34
กำรอ่ำนข้อมูลชนิดข้อควำมจำกไฟล์
#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
35
กำรอ่ำนข้อมูลชนิดอักขระจำกไฟล์
#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);
}
Silpakron U.
ICT Petchaburi
S
i
l
p
36
กำรอ่ำนข้อมูลชนิดตัวเลขจำกไฟล์
#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 2002
30 5 2003
11
3
37
อ่ำนข้อมูลด้วย fread()
• ฟังก์ชนั fread ใช้อ่านข้อมูลเป็ นเรคคอร์ดหรื อเป็ นชุด ซึ่งขนาด
ของเรคคอร์ดหรื อชุดข้อมูลเราเป็ นผูก้ าหนดขึ้นเองในหน่วยไบต
• รู ปแบบการเขียนคาสัง่
fread(ptr, size, number, fp)
ptr คือค่ำตำแหน่งในหน่วยควำมจำ ซึ่งจะนำข้อมูลที่อ่ำนได้มำเก็บไว้
size คือขนำดของเรคคอร์ดหรื อชุดข้อมูล โดยมีหน่วยเป็ นไบต์
number คือจำนวนเร็ คคอร์ดหรื อชุดข้อมูลที่จะอ่ำน
fp คือตัวชี้ตำแหน่งไฟล์ที่ตอ้ งกำรอ่ำน
38
ตัวอย่ำงกำรใช้ 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
30 5 2003
11 3 2002
39
กำรเขียนใส่ ลงในไฟล์
• การเขียนหรื อบันทึกข้อมูลลงไฟล์ เราจะต้องทาการเปิ ดไฟล์เพื่อ
เขียนได้แก่ w, w+, a, a+ และ r+
• โดยที่ขอ้ มูลที่เราดาเนินการจะถูกเขียนลงบนบัฟเฟอร์ก่อน ใน
ระหว่างที่เขียนข้อมูล ตัวชี้ไฟล์จะเลื่อนตาแหน่งชี้ไปเรื่ อยๆ ตาม
ปริ มาณการเขียน เมื่อบัฟเฟอร์เต็มหรื อทาการปิ ดไฟล์ขอ้ มูลเหล่านั้น
จึงจะถูกเขียนลงไปในไฟล์จริ งๆ ที่เราอ้างถึงตอนเปิ ดไฟล์
40
เขียนข้อมูลด้วย putc()
• เป็ นฟังก์ชนั ที่ใช้สาหรับเขียนข้อมูลประเภทตัวอักขระลงในไฟล์
โดยเขียนลงในไฟล์ครั้งละ 1 ตัวอักษรเท่านั้น
• รู ปแบบการเขียนคาสัง่
putc( ตัวแปรหรื อค่ำอักขระ, ตัวชี้ตำแหน่งไฟล์)
ตัวอย่ำง
FILE *fp;
char ch = ‘Z’;
fp = fopen(“C:/my_c/abc.txt”, “w”);
putc(‘A’,fp); putc(ch,fp);
41
ตัวอย่ำงกำรใช้ 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
ABCDEF
42
เขียนข้อมูลด้วย fputc()
• ใช้เขียนอักขระลงไฟล์เช่นเดียวกับฟังก์ชนั putc()
• รู ปแบบการเขียนคาสัง่
fputc( ตัวแปรหรื อค่ำอักขระ, ตัวชี้ตำแหน่งไฟล์)
ตัวอย่ำง
FILE *fp;
char ch = ‘Z’;
fp = fopen(“C:/my_c/abc.txt”, “w”);
fputc(‘A’,fp); fputc(ch,fp);
43
เขียนข้อมูลด้วย fputs()
• เป็ นฟังก์ชนั ใช้สาหรับเขียนข้อความลงในไฟล์
• รู ปแบบการเขียนคาสัง่
fputs( ตัวแปรข้อควำมหรื อข้อควำม, ตัวชี้ตำแหน่งไฟล์)
ตัวอย่ำง
FILE *fp;
char str[10] = “sawasdee”;
fp = fopen(“C:/my_c/abc.txt”, “w”);
fputs(“ALOHA ”,fp);
fputs( str, fp );
44
ตัวอย่ำงกำรใช้ 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);
}
Name1
Name2
Name3
Name4
Name5
45
เขียนข้อมูลด้วย fprintf()
• นอกเหนือจากข้อมูลที่เป็ นข้อความที่เราสามารถเขียนลงไฟล์ได้แล้ว
เราก็สามารถเขียนข้อมูลชนิดอื่นๆ ลงไฟล์ได้เช่นกัน
• รู ปแบบการเขียนคาสัง่
fprintf(ตัวชี้ตำแหน่งไฟล์, ตัวควบคุม, ตัวแปรข้อควำมหรื อข้อควำม)
หมำยเหตุ “ตัวควบคุม” จะมีลกั ษณะคล้ำยกับของคำสัง่ printf
46
ตัวอย่ำงกำรใช้ 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);
}
Name:Awirut Nareerat
School:Wachirawut
Age:10
Sex:M
47
เขียนข้อมูลด้วย fwrite()
• ฟังก์ชนั fwrite ใช้เขียนข้อมูลเป็ นเรคคอร์ดหรื อเป็ นชุด ซึ่งขนาด
ของเรคคอร์ดหรื อชุดข้อมูลเราเป็ นผูก้ าหนดขึ้นเองในหน่วยไบต
• รู ปแบบการเขียนคาสัง่
fwrite(ptr, size, number, fp)
ptr คือค่ำตำแหน่งในหน่วยควำมจำ ซึ่งจะนำข้อมูลที่อ่ำนได้มำเก็บไว้
size คือขนำดของเรคคอร์ดหรื อชุดข้อมูล โดยมีหน่วยเป็ นไบต์
number คือจำนวนเร็ คคอร์ดหรื อชุดข้อมูลที่จะอ่ำน
fp คือตัวชี้ตำแหน่งไฟล์ที่ตอ้ งกำรอ่ำน
48
ตัวอย่ำงกำรใช้ 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.
The c is easy
49