C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer...

24
FILE OPERATIONS 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka

Transcript of C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer...

Page 1: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

FILE OPERATIONS

030523300- Computer Programming

Asst. Prof. Dr. Choopan Rattanapoka

Page 2: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

File และ การใชงาน

ชนดของ File ในภาษา C แบงเปน

Text file เปนแฟมขอมลทใชในการเกบตวขระปกต มการสนสด

ของบรรทดทแนนอน ซงกคอ ‘\n’ ในภาษา C สามารถอาน หรอ

เขยนแฟมขอมลทละบรรทดได

Binary file เปนแฟมขอมลทใชเกบเลขฐาน 2 ตอเนองกน จะไมม

ขอบเขตของบรรทด เวลาใชงานจงตองก าหนดขนาดในการ อาน หรอ

เขยน เปนจ านวนไบต (byte)

Page 3: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

การก าหนดชอของแฟมขอมล

DOS และ Windows 3.X

ชอของแฟมขอมลจะมความยาวสงสดไดเพยง 8 ตวอกษร ตามดวย ‘.’ และ นามสกลอก 3 ตวอกษร

Windows 95 หรอ สงกวา

ชอของแฟมขอมลจะมความยาวสงสดได 256 ตวอกษร

ตวอกษรทหามใชในการตงชอแฟมขอมล

/ \ : * ? “ < > |

ต าแหนงทอยของแฟมขอมล เรยกวา Path เชน

C:\myprogram\mysubdir\readme.txt

Path ชอแฟมขอมล

Page 4: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

ค าสงจดการแฟมขอมลในภาษา C

กลมค าสงทใชในการจดการเกยวกบแฟมขอมล แบงออกเปน 4 ประเภท

ใหญๆคอ

เปดแฟมขอมล

ปดแฟมขอมล

อานแฟมขอมล

เขยนแฟมขอมล

Page 5: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

การเปดแฟมขอมล

ทกครงทจะท างานตางๆ เกยวกบแฟมขอมล จ าเปนจะตองท าการเปด

แฟมขอมลนนข นมากอน

เงอนไขในการเปดแฟมขอมล

ถาแฟมขอมลทถกเปด ไมมอยในระบบ การเปดแฟมขอมลในภาษา C จะเปน

การ สรางแฟมขอมลนนขนมาใหม

ถาแฟมขอมลทถกเปด มอยในระบบ การเปดแฟมขอมลในภาษา C จะเปนการ

แกไขแฟมขอมลนน

ค าสง (function) ทใชในการเปดแฟมขอมลในภาษา C คอ

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

Page 6: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

การใชงาน fopen

Return value

คนคา NULL ถาเปดแฟมขอมลไมส าเรจ

คนคา pointer ทช ไปยงแฟมขอมลนน ถาเปดแฟมขอมลส าเรจ

Parameters

const char *filename ชอแฟมขอมลทตองการจะเปด เชน“C:\\Program Files\\Hello.txt”

const char *mode โหมดทจะท างานกบแฟมขอมลน

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

Page 7: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

โหมดการท างานในการเปดแฟมขอมล

ใน const char *mode สามารถระบโหมดการท างานดงน r เปนการเปดแฟมขอมลเพออาน (read) ถาแฟมขอมลนนไมมอยในระบบ fopen

จะคนคา NULL

w เปนการเปดแฟมขอมลเพอเขยน (write) ถาแฟมขอมลนนไมมอยในระบบ จะเปนการสรางแฟมขอมลใหม แตถามแฟมขอมลอยในระบบ จะเปนเขยนทบแฟมขอมลท

เปด

a เปนการเปดแฟมขอมลเพอเขยนตอ (append) ถาแฟมขอมลไมมอยในระบบจะเปนการสรางแฟมขอมลใหม แตถามแฟมขอมลอยในระบบจะเปนการเขยนตอทาย

r+ หรอ w+ เปนการเปดแฟมขอมลเพออานและเขยน ถาแฟมขอมลไมมอยจะสรางแฟมขอมลใหม แตถามแฟมขอมลอยแลวการเขยนจะเปนการเขยนทบ

a+ เปนการเปดแฟมขอมลเพออานและเขยน ถาแฟมขอมลไมมอยจะสรางแฟมขอมลใหม แตถามแฟมขอมลอยแลวการเขยนจะเปนการเขยนตอทาย

Page 8: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

โหมดการท างานในการเปดแฟมขอมล (ตอ)

ใน const char *mode สามารถระบโหมดการท างานดงน

t เปนการเปดแฟมขอมลประเภท text file ในกรณทไมระบภาษา C จะเปน

การท างานเปนโหมด text file

b เปนการเปดแฟมขอมลประเภท binary file

ตวอยาง เปดแฟมขอมล c:\tmp\hello.txt ทเปนแฟมขอมลแบบ

text เพออานและเขยนแบบไมทบขอมลเกาในแฟมขอมล

fopen(“c:\\tmp\\hello.txt”, “a+t”);

Page 9: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

การปดแฟมขอมล

Parameter

เอา pointer ของ FILE ทไดจากการเปดแฟมขอมลมาสงเพอใชปด

Return value

ถาการปดแฟมขอมลเรยบรอย ค าสง fclose จะคนคาเปน 0

ถามขอผดพลาดระหวางปดแฟมขอมล fclose จะคนคาเปน EOF

int fclose(FILE *fp);

Page 10: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

ตวอยางการเปด/ปด แฟมขอมล

#include <stdio.h>

int main(int argc, char **argv) {

FILE *fp;

if((fp = fopen(“test.txt”, “w”)) == NULL) {

printf(“Can not open file\n”); return 1;

}

if(fclose(fp) != 0) {

printf(“Error while closing file\n”);

return 1;

}

system(“PAUSE”);

return 0;

}

Page 11: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

การเขยนแฟมขอมลประเภท Text

ค าสงในการเขยนแฟมขอมลประเภท text

การใชงานคลายกบค าสง printf เพยงแตเพม parameter เขามา 1

ตวคอ FILE *fp

การคนคา

ถาการเขยนส าเรจจะคนคาเปนจ านวนเตมบวก เทากบ จ านวนไบตทเขยนลง

แฟมขอมล

ถามขอผดพลาดระหวางการเขยนขอมล จ านวนเตมลบ จะถกคนคากลบ

int fprintf(FILE *fp, char *fmt, ...);

Page 12: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

ตวอยางการเขยนแฟมขอมลประเภท Text

#include <stdio.h>

int main(int argc, char **argv) {

FILE *fp;

int I = 25; char grade = ‘A’;

if((fp = fopen(“test.txt”, “w”)) == NULL) {

printf(“Can not open file”); return 1;

}

if( fprintf(fp, “I = %d , grade = %c\n”, I, grade) < 0) {

printf(“Can not write file”); return 1;

}

printf(“work completed\n”);

fclose(fp);

system(“PAUSE”);

return 0;

}

I = 25, grade = A

test.txt

Page 13: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

การอานแฟมขอมลประเภท Text

ค าสงในการอานแฟมขอมลประเภท text ทละบรรทด

การใชงานคลายกบค าสง scanf เพยงแตเพม parameter เขามา 1

ตวคอ FILE *fp

การคนคา

EOF ถาการอานถงจดสนสดของแฟมขอมล หรอ มขอผดพลาดระหวางการอาน

int fscanf(FILE *fp, const char *fmt, ...);

Page 14: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

ตวอยางการอานแฟมขอมลประเภท Text

#include <stdio.h>

int main(int argc, char **argv) {

FILE *fp;

int x, y;

fp = fopen(“test.txt”, “r”);

fscanf(fp, “%d %d”, &x, &y);

fclose(fp);

printf(“X = %d, Y = %d\n”, x, y);

system(“PAUSE”);

return 0;

}

10 5

11 20

test.txt

Monitor

X = 10, Y = 5

Page 15: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

ตวอยางการอานแฟมขอมลประเภท Text (ตอ)

#include <stdio.h>

int main(int argc, char **argv) {

FILE *fp;

int x, y;

fp = fopen(“test.txt”, “r”);

while(fscanf(fp, “%d %d”, &x, &y) != EOF) {

printf(“X = %d, Y = %d\n”, x, y);

}

fclose(fp);

system(“PAUSE”);

return 0;

}

10 5

11 20

test.txt

Monitor

X = 10, Y = 5

X = 11, Y = 20

Page 16: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

การอาน/เขยนแฟมขอมลประเภท Text แบบตวอกษร

ค าสงในการเขยนแฟมขอมลประเภท text แบบตวอกษรอยางเดยว

int fputc(int c, FILE *fp);

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

ค าสงในการอานแฟมขอมลประเภท text แบบตวอกษรอยางเดยว

int fgetc(FILE *fp); -> EOF เมอสดแฟม

char *fgets(char *s, int size, FILE *fp); -> NULL เมอสดแฟม

Page 17: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

ตวอยางการใช fputc

#include<stdio.h>

int main(int argc, char **argv){

char *ch = "Control Systems";FILE *fp;

if( (fp = fopen("c:\\test2.txt","w"))==NULL ){printf("error"); return 1;

}while(*ch != NULL){

fputc(*(ch++),fp); }

fclose(fp); system(“PAUSE”);return 0;

}

Page 18: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

ตวอยางการใช fputs

include<stdio.h>

int main(int argc, char **argv){

int i; char mytext[3][64] = {"Control Systems","Digital","Computer"};FILE *fp;

if((fp = fopen("c:\\test3.txt","w"))==NULL ) {printf("error"); return 1;

}for(i=0;i<3;i++){ fputs(mytext[i], fp); }fclose(fp); system(“PAUSE”); return 0;

}

Page 19: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

ตวอยางการใช fgetc

#include<stdio.h>

int main(int argc, char **argv){

char k;FILE *fp;

if( (fp = fopen("c:\\test.txt","r"))==NULL ) {printf("error"); return 1;

}while((k = fgetc(fp)) != EOF) {

printf("%c", k); }

fclose(fp);system(“pause”);return 0;

}

Page 20: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

ตวอยางการใช fgets

#include<stdio.h>

int main(int argc, char **argv){

char str[64];FILE *fp;

if((fp = fopen("c:\\str_test.txt","r"))==NULL ){printf("error"); return 1 ;

}while(fgets(str,64,fp) != NULL) {

printf("%s", str); }fclose(fp);system(“PAUSE”);return 0;

}

Page 21: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

การท างานกบแฟมขอมลแบบ Binary

ค าสงทใชในการอานแฟมขอมลแบบ Binary

ค าสงทใชในการเขยนแฟมขอมลแบบ Binary

Parameter buf ขอมล Buffer ทจะใชเขยนลงแฟมขอมล(fwrite) หรอ อานจากแฟมขอมลมา

เกบไว(fread)

size ขนาดของประเภทขอมล (sizeof)

count จ านวนขอมลทจะเขยน/อาน ลง แฟมขอมล

int fread(void *buf, int size, int count, FILE *fp);

int fwrite(void *buf, int size, int count, FILE *fp);

Page 22: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

การจดการเกยวกบ file pointer

ใชเลอนต าแหนง file pointer ไปต าแหนงตางๆในแฟมขอมล

Parameter offset เปนคาทน าไป บวก กบ คาของ where เพอก าหนดต าแหนงของ fp

where เปนจดอางองของ fp SEEK_SET ใชแทนต าแหนงเรมตนของแฟมขอมล

SEEK_CUR ใชแทนต าแหนงปจจบนท fp ช อย

SEEK_END ใชแทนต าแหนงทายสดของแฟมขอมล

ใชเลอนต าแหนง file pointer กลบไปทจดเรมตนของแฟมขอมล

int fseek(FILE *fp, long offset, int where);

void rewind(FILE *fp);

Page 23: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

การท างานของ fseek

ABCDEFGHIJKLMNOPQRSTUVWXYZ

test.txt

#include <stdio.h>

int main(int argc, char **argv) {

FILE *fp;

if((fp = fopen(“test.txt”, “rb”)) != NULL) {

printf(“%c\n”, fgetc(fp));

fseek(fp, 5, SEEK_CUR);

printf(“%c\n”, fgetc(fp));

fclose(fp);

}

system(“PAUSE”); return 0;

}

fp

monitor

fp AfpfpG

Page 24: C Programming : Ch3choopanr.staff.kmutnb.ac.th/files/course/030523300/11.pdf · 030523300- Computer Programming Asst. Prof. Dr. Choopan Rattanapoka. File และ การใช้งาน

#include<stdio.h>

int main(int argc, char **argv)

{

FILE *fp;

fp = fopen("c:\\kk.txt","rb");

fseek(fp, 8, SEEK_SET); printf(“%c\n",fgetc(fp));

fseek(fp,-3, SEEK_END); printf(“%c\n",fgetc(fp));

fseek(fp,-3, SEEK_CUR); printf(“%c\n",fgetc(fp));

fseek(fp, 3,SEEK_CUR); printf(“%c\n",fgetc(fp));

fclose(fp); getch();

}

แบบฝกหด fseek

kk.txt

123456789