1 / 49

Laboratory 2

Laboratory 2. File Access. เกริ่นนำ. การเขียนโปรแกรมของเราที่ผ่านมาจะนำข้อมูลเข้าผ่านทางอุปกรณ์รับข้อมูลมาตรฐานหรือคีย์บอร์ดนั่นเอง และส่งผลจากการประมวลผลใดๆ ออกทางอุปกรณ์แสดงผลมาตรฐานหรือหน้าจอคอมพิวเตอร์

Télécharger la présentation

Laboratory 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Laboratory 2 File Access

  2. เกริ่นนำ • การเขียนโปรแกรมของเราที่ผ่านมาจะนำข้อมูลเข้าผ่านทางอุปกรณ์รับข้อมูลมาตรฐานหรือคีย์บอร์ดนั่นเอง และส่งผลจากการประมวลผลใดๆ ออกทางอุปกรณ์แสดงผลมาตรฐานหรือหน้าจอคอมพิวเตอร์ • อีกทางของรับข้อมูลและแสดงผลข้อมูล คือเราสามารถนำเข้าข้อมูลที่เก็บอยู่ในไฟล์ และแสดงผลของการดำเนินงานเก็บไว้ในไฟล์ • ซึ่งบทนี้เราจะเรียนคำสั่งภาษาซีเกี่ยวกับการติดต่อกับไฟล์

  3. หลักการประมวลผลกับไฟล์หลักการประมวลผลกับไฟล์ C programming Operating System Buffer File pointer ไฟล์ที่เก็บในฮาร์ดดิสก์

  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. ตัวอย่างการเปิดไฟล์ อย่างที่ได้กล่าวไว้แล้ว การเปิดไฟล์จะส่งผลลัพธ์กลับออกมาเป็นตัวชี้ไฟล์ แต่ถ้าการเปิดไฟล์ไม่สำเร็จ ค่าที่ส่งกลับมาคือ NULLดังนั้นเราจึงควรตรวจสอบให้แน่ใจว่าทำการเปิดไฟล์สำเร็จก่อนการดำเนินการใดๆ กับไฟล์ #include <stdio.h> main(){ FILE *fp; fp = fopen(“box.txt”, “r”); if (fp == NULL) { printf(“Cannot open file\n”); exit(); } fclose(fp); }

  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 file Close 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. 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

  23. การใช้งานจริงของการอ่านไฟล์การใช้งานจริงของการอ่านไฟล์ • ถ้าต้องการอ่านข้อมูลจนจบไฟล์โดยใช้ฟังก์ชัน getc() ต้องมีการวนลูปอ่านทีละตัวอักษรจนหมดไฟล์ • ในกรณีของเท็กซ์ไฟล์ เรามีอักษรพิเศษเมื่อตัวชี้ไฟล์ชี้ไปถึงจุดสิ้นสุดไฟล์ คือ EOF เพื่อบ่งบอกว่าจบไฟล์ เราสามารถอ่านอักขระมีทีละอักขระแล้วมาเปรียบเทียบว่าเป็น EOF หรือไม่ ถ้าอักษรนั้นเท่ากับ EOF ก็แสดงว่าจบไฟล์นี้แล้ว

  24. 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.

  25. การหาจุดสิ้นสุดไฟล์ (End of File) • เท็กซ์ไฟล์ เมื่ออ่านข้อมูลจนจบไฟล์แล้วจะให้ค่า EOF ออกมาเพื่อบอกว่าจุดสิ้นสุดไฟล์ • ไบนารีไฟล์ เมื่ออ่านข้อมูลจนจบไฟล์ก็ไม่ให้ค่า EOF ออกมาเหมือนเท็กซ์ไฟล์ • การตรวจสอบจุดจบของไบนารีไฟล์ใช้ฟังก์ชัน feof() • ฟังก์ชัน feof()สามารถใช้ได้ทั้งเท็กซ์ไฟล์และไบนารีไฟล์

  26. ฟังก์ชัน feof() • เป็นฟังก์ชันเพื่อใช้ตรวจสอบจุดสิ้นสุดไฟล์ โดยสามารถใช้ได้ทั้งเท็กซ์ไฟล์และไบนารีไฟล์ • รูปแบบการเขียนคำสั่ง • ถ้ายังไม่จบไฟล์ค่าที่ได้จากฟังก์ชันจะเป็นศูนย์ หรือเท็จ • ถ้าจบไฟล์ค่าที่ได้จากฟังก์ชันจะไม่เท่ากับศูนย์ หรือจริง ตัวแปรตัวเลข= feof(ตัวชี้ไฟล์) if ( !feof(ตัวชี้ไฟล์) ) { . . . }

  27. 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.

  28. อ่านข้อมูลทีละอักขระ ด้วย fgetc( ) • ฟังก์ชัน fgetc( )ใช้ในการอ่านข้อมูลชนิดอักขระจากไฟล์ เช่นเดียวกับฟังก์ชัน getc( ) • รูปแบบการเขียนคำสั่ง ตัวแปรชนิดอักขระ= fgetc(ตัวชี้ไฟล์) ตัวอย่าง FILE *fp; char ch; fp = fopen(“C:/my_c/abc.txt”, “r”); ch = fgetc(fp);

  29. 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.

  30. อ่านข้อมูลทีละข้อความด้วย fgets() • ฟังก์ชัน fgets() ใช้ในกรณีที่ต้องการอ่านข้อมูลจากไฟล์ออกมาต่อเนื่องกันเป็นข้อความ โดยสามารถกำหนดความยาวของข้อความได้ • รูปแบบของการเขียนคำสั่ง fgets(ตัวแปรชนิดอักขระ, จำนวนตัวอักษร, ตัวชี้ไฟล์) หมายเหตุ จำนวนตัวอักษรนี้จะถูกลบออก 1 ตัวอักษรเพื่อใส่ตัวอักษรจบข้อความ ‘\0’

  31. 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

  32. 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.

  33. 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

  34. อ่านข้อมูลด้วย fscanf() • เราสามารถอ่านข้อมูลจากไฟล์เป็นข้อมูลชนิดอื่นๆ ได้ นอกเหนือจากตัวอักษรหรือข้อความ เช่นข้อมูลตัวเลข เป็นต้น • รูปแบบการเขียนคำสั่ง fscanf(ตัวชี้ไฟล์, “รูปแบบ”, &ตัวแปร) หมายเหตุ “รูปแบบ” จะมีลักษณะคล้ายกับของคำสั่ง scanf

  35. 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

  36. 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

  37. 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

  38. อ่านข้อมูลด้วย fread() • ฟังก์ชัน fread ใช้อ่านข้อมูลเป็นเรคคอร์ดหรือเป็นชุด ซึ่งขนาดของเรคคอร์ดหรือชุดข้อมูลเราเป็นผู้กำหนดขึ้นเองในหน่วยไบต • รูปแบบการเขียนคำสั่ง fread(ptr, size, number, fp) ptr คือค่าตำแหน่งในหน่วยความจำ ซึ่งจะนำข้อมูลที่อ่านได้มาเก็บไว้ size คือขนาดของเรคคอร์ดหรือชุดข้อมูล โดยมีหน่วยเป็นไบต์ number คือจำนวนเร็คคอร์ดหรือชุดข้อมูลที่จะอ่าน fp คือตัวชี้ตำแหน่งไฟล์ที่ต้องการอ่าน

  39. 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

  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. 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

  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. 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); }

  46. เขียนข้อมูลด้วย fprintf() • นอกเหนือจากข้อมูลที่เป็นข้อความที่เราสามารถเขียนลงไฟล์ได้แล้วเราก็สามารถเขียนข้อมูลชนิดอื่นๆ ลงไฟล์ได้เช่นกัน • รูปแบบการเขียนคำสั่ง fprintf(ตัวชี้ตำแหน่งไฟล์, ตัวควบคุม, ตัวแปรข้อความหรือข้อความ) หมายเหตุ “ตัวควบคุม” จะมีลักษณะคล้ายกับของคำสั่ง printf

  47. 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); }

  48. เขียนข้อมูลด้วย fwrite() • ฟังก์ชัน fwrite ใช้เขียนข้อมูลเป็นเรคคอร์ดหรือเป็นชุด ซึ่งขนาดของเรคคอร์ดหรือชุดข้อมูลเราเป็นผู้กำหนดขึ้นเองในหน่วยไบต • รูปแบบการเขียนคำสั่ง fwrite(ptr, size, number, fp) ptr คือค่าตำแหน่งในหน่วยความจำ ซึ่งจะนำข้อมูลที่อ่านได้มาเก็บไว้ size คือขนาดของเรคคอร์ดหรือชุดข้อมูล โดยมีหน่วยเป็นไบต์ number คือจำนวนเร็คคอร์ดหรือชุดข้อมูลที่จะอ่าน fp คือตัวชี้ตำแหน่งไฟล์ที่ต้องการอ่าน

  49. 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

More Related