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