วันพุธที่ 8 มีนาคม พ.ศ. 2560

C Language [ การประมวลผลไฟล์ เขียนข้อมูล การเปลี่ยนชื่อไฟล์]

หลักการประมวลผลไฟล์       การเขียนโปรแกรมในภาษาซี เพื่อประมวลผลกับไฟล์ หมายถึงการเขียนคำสั่งเพื่ออ่านข้อมูลจากไฟล์ หรือเขียนข้อมูลลงไฟล์นั้น ซึ่งเราควรจะเข้าใจหลักการทำงานของภาษาซี ในการประมวลผลกับไฟล์ก่อนที่จะเริ่มเขียนโปรแกรม โดยรูปต่อไปนี้แสดงขั้นตอนการประมวลผลระหว่างโปรแกรมภาษาซีกับไฟล์
      การประมวลผลกับไฟล์เพื่ออ่านหรือเขียนข้อมูลนั้นจะไม่กระทำกับไฟล์โดยตรง แต่จะกระทำผ่านตัวกลางที่เรียกว่า บัฟเฟอร์ (Buffer) โดยบัฟเฟอร์คือพื้นที่ในหน่วยความจำหลักของเครื่องคอมพิวเตอร์ที่เครื่องจะ เตรียมไว้สำหรับประมวลผลกับไฟล์ ถ้าทำการประมวลผลกับหลายๆ ไฟล์ แต่ละไฟล์ก็จะมีบัฟเฟอร์เฉพาะสำหรับไฟล์นั้น อย่างเช่น ถ้าเราจะประมวลผลกับไฟล์ชื่อ A, B และ C พื้นที่ในหน่วยความจำจะถูกกำหนดแยกเอาไว้ 3 ส่วนด้วยกัน เพื่อให้เป็นบัฟเฟอร์ของไฟล์ A, B และ C
      โครงสร้างของไฟล์ในภาษาซี จะเก็บข้อมูลในลักษณะเรียงต่อกันตั้งแต่ต้นจนจบไฟล์ ไม่มีการแบ่งช่วงของข้อมูล ดังนั้นการที่จะเลือกระบุข้อมูลใดๆ ก็ตามในไฟล์ได้นั้น เราจะต้องรู้ตำแหน่งของข้อมูล ซึ่งการระบุตำแหน่งของข้อมูลภายในไฟล์สามารถทำได้โดยใช้ตัวชี้ตำแหน่งไฟล์ (file pointer)
      ตัวชี้ตำแหน่งไฟล์จะเป็นตัวบอกตำแหน่งภายในไฟล์ โดยจะเป็นตัวบอกว่าขณะนั้นทำการประมวลผลอยู่ ณ ตำแหน่งใดภายในไฟล์ ทำให้เราสามารถกำหนดได้ว่าจะอ่านหรือเขียนข้อมูลโดยเริ่มต้นจากจุดใดและไป สิ้นสุดที่ตำแหน่งใดในไฟล์ เมื่อเราทำการเปิดไฟล์ตัวชี้ตำแหน่งไฟล์จะถูกสร้างขึ้น โดยตัวชี้ตำแหน่งไฟล์จะชี้ไปที่จุดเริ่มต้นของไฟล์ที่ทำการเปิดนั้น เมื่ออ่านหรือเขียนข้อมูลจากไฟล์ตัวชี้ตำแหน่งไฟล์ก็จะเลื่อนไปเรื่อยๆ ตามจำนวนของข้อมูล
      ในกรณีที่ประมวลผลกับหลายไฟล์ เมื่อทำการเปิดไฟล์ตัวชี้ตำแหน่งไฟล์จะถูกสร้างขึ้นเฉพาะสำหรับแต่ละไฟล์ พร้อมกับชี้ไปที่ตำแหน่งเริ่มต้นของไฟล์เหล่านั้น
 

   ประเภทของไฟล์

      ไฟล์ข้อมูลสามารถแบ่งออกได้เป็น 2 ประเภทด้วยกัน ดังนี้
      9.2.1 เท็กซ์ไฟล์ (Text File) คือ ไฟล์ข้อมูลที่มีการเก็บข้อมูลเป็นบรรทัด เช่น ไฟล์ข้อความที่สร้างโดยโปรแกรมเอดิเตอร์ต่างๆ หรือไฟลืที่มีนามสกุล c , txt, bat เป็นต้น เท็กซ์ไฟล์จะถูกเก็บไว้ในหน่วยความจำสำรอง และเก็บในรูปแบบรหัสแอสกี ซึ่งก็คือไฟล์ตัวอักษร
      9.2.2 ไบนารี่ไฟล์ (Binary File) คือ ไฟล์ที่มีการเก็บข้อมูลในรูปแบบเลขฐานสอง เช่น ไฟล์โปรแกรมต่างๆ ที่มีนามสกุล exe, com, obj เป็นต้น ดังนั้นเราจึงไม่สามารถอ่านข้อมูลในไฟล์ประเภทนี้ได้รู้เรื่อง
การเปิดไฟล์ 
      ในการทำงานใดๆ กับไฟล์ไม่ว่าจะเป็นการอ่านข้อมูลจากไฟล์หรือเขียนข้อมูลลงไฟล์ สิ่งแรกที่ต้องกระทำก่อนก็คือ การเปิดไฟล์ โดยเมื่อทำการเปิดไฟล์ขึ้นมาแล้วตัวชี้ตำแหน่งไฟล์จะถูกสร้างขึ้นเพื่อชี้ ตำแหน่งภายในไฟล์นั้น ซึ่งตัวชี้ตำแหน่งไฟล์นี้เราจะนำไปใช้ในการอ่านหรือเขียนข้อมูลกับไฟล์
      ในการเปิดไฟล์จะต้องใช้ 2 คำสั่งด้วยกัน โดยเริ่มจากคำสั่งแรกซึ่งเป็นคำสั่งสำหรบสร้างตัวแปรพอยน์เตอร์ชนิดไฟล์ สำหรับเก็บค่าของตัวชี้ตำแหน่งไฟล์ที่จะได้จากการเปิดไฟล์ ดังนี้
     รูปแบบ
FILE *fp;
 
โดยที่FILEหมายถึงสำหรับสร้างตัวแปรชนิดไฟล์ ซึ่งต้องเขียนเป็นตัวพิมพ์ใหญ่ทั้งหมด
 fpหมายถึงชื่อของตัวแปรที่จะสร้างขึ้นเพื่อเก็บค่าของตัวชี้ตำแหน่งไฟล์ ซึ่งจะต้องตามหลังีเครื่องหมาย * เพื่อบอกว่าเป็นตัวแปรประเภทพอยน์เตอร์
 
      จากนั้นเราจะทำการเปิดไฟล์โดยเรียกใช้ฟังก์ชัน fopen() ซึ่งเป็นไลบรารี่ฟังก์ชันที่อยู่ในไฟล์ stdio.h ดังนั้นจึงต้องเขียนคำสั่ง #include <stdio.h> ไว้ที่ส่วนหัวของโปรแกรมด้วย รูปแบบของการเรียกใช้ฟังก์ชัน fopen() แสดงได้ดังนี้
     รูปแบบ
fp = fopen("name","mode");
 
โดยที่fpหมายถึงตัวแปรที่สร้างขึ้นเพื่อเก็บค่าของตัวชี้ตำแหน่งไฟล์
 nameหมายถึงชื่อของไฟล์ที่จะทำการเปิด
 modeหมายถึงโหมดของไฟล์ โดยโหมดของไฟล์จะเป็นตัวบอกว่าเราต้องการเปิดไฟล์เพื่อวัตถุประสงค์ใด ซึ่งมีโหมดในการเปิดไฟล์ดังนี้
 
โหมดของเท็กซ์ไฟล์
โหมดของไบนารีไฟล์
ความหมาย
r
rb
เปิดไฟล์เพื่ออ่านข้อมูลจากไฟล์ที่ถูกสร้างไว้แล้วเพียงอย่างเดียว ไม่สามารถเขียนข้อมูลลงไปในไฟล์ได้
w
wb
เปิดไฟล์เพื่อสำหรับเขียนข้อมูล โดยถ้าไฟล์นั้นไม่มีอยู่ เครื่องจะทำการสร้างไฟล์ขึ้นมาใหม่ แต่ถ้ามีไฟล์อยู่แล้วข้อมูลเก่าจะถูกลบทิ้งแล้วแทนที่ด้วยข้อมูลใหม่
a
ab
เปิดไฟล์สำหรับเขียนข้อมูลต่อท้ายลงไปในไฟล์ ที่ถูกสร้างไว้แล้ว
r+
r+b
เปิดไฟล์สำหรับอ่านและเขียนข้อมูลลงในไฟล์ที่ถูกสร้างไว้แล้ว
w+
w+b
เปิดไฟล์สำหรับอ่านและเขียนข้อมูลทับ โดยเครื่องจะทำการสร้างไฟล์ขึ้นมาใหม่ ถ้าไฟล์ที่ต้องการเปิดยังไม่มี
a+
a+b
เปิดไฟล์สำหรับเขียนข้อมูลต่อท้ายลงไปในไฟล์ โดยถ้าไฟล์นั้นไม่มีอยู่ เครื่องจะทำการสร้างไฟล์ขึ้นมาใหม่
 
การปิดไฟล์
      หลังจากที่มีการอ่านหรือบันทึกแฟ้มข้อมูลเสร็จแล้ว จะต้องมีการปิดแฟ้มข้อมูลเสมอ การปิดแฟ้มจะเกิดการนำข้อมูลออกจากอินพุตบัฟเฟอร์หรือเอาท์พุตบัฟเฟอร์ให้หมด เพื่อไม่ให้ข้อมูลหายจากระบบ ในภาษาซีมีฟังก์ชัน 2 ฟังก์ชันที่ใช้ในการปิดแฟ้มข้อมูล คือ fclose ( ) และ fcloseall ( )
      9.4.1 ฟังก์ชัน fclose( )      ฟังก์ชัน fclose( ) ถูกนิยามไว้ในแฟ้ม stdio.h ฟังก์ชันนี้จะทำหน้าที่ปิดแฟ้มข้อมูลที่กำหนดโดยมีการบันทึกข้อมูลใน บัฟเฟอร์ทั้งหมดเก็บเข้าแฟ้ม แล้วจะยกเลิกการใช้บัฟเฟอร ์ทำให้มีเนื้อที่เปิดแฟ้มใหม่เพิ่มได้อีก ถ้าปิดแฟ้มข้อมูลสำเร็จจะส่งกลับเป็น NULL หรือ 0 ถ้ามีข้อผิดพลาดจะส่งค่ากลับเป็น EOF
     รูปแบบ
fclose (fp);
 
โดยที่fpหมายถึงชื่อของตัวแปรที่จะสร้างขึ้นเพื่อเก็บค่าของตัวชี้ตำแหน่งไฟล์ ซึ่งจะต้องตามหลังีเครื่องหมาย * เพื่อบอกว่าเป็นตัวแปรประเภทพอยน์เตอร์
 
      9.4.2 ฟังก์ชัน fcloseall ( )      ฟังก์ชัน fcloseall ( ) ถูกนิยามไว้ในแฟ้ม stdio.h ฟังก์ชันนี้จะปิดแฟ้มข้อมูลทั้งหมดที่ได้เปิดไว้ และให้ค่ากลับมายังฟังก์ชันเป็นจำนวนแฟ้มที่ถูกปิด ถ้ามีข้อผิดพลาดจะให้ค่ากลับเป็น EOF
     รูปแบบ
fcloseall ();
อ่านข้อมูลจากไฟล์
      เมื่อเราเขียนโปรแกรมเพื่ออ่านข้อมูลจากไฟล์ ข้อมูลภายในไฟล์จะถูกอ่านเริ่มตั้งแต่ตรงที่ตัวชี้ตำแหน่งไฟล์ชี้อยู่ไปจนครบตามจำนวนที่กำหนด หรือจนจบไฟล์ ซึ่งตัวชี้ตำแหน่งไฟล์ก็จะเลื่อนตามไปเรื่อยๆ ตามข้อมูลที่อ่าน ข้อมูลส่วนที่อ่านมาจากไฟล์จะถูกนำไปเก็บไว้ที่บัฟเฟอร์ ดังนั้นจริงๆ แล้วโปรแกรมที่เราเขียนนั้นอ่านข้อมูลมาจากบัฟเฟอร์อีกทีหนึ่ง ไม่ใช่จากไฟล์โดยตรง ซึ่งฟังก์ชันที่ใช้ในการอ่านข้อมูลจากไฟล์มีดังนี้
      9.5.1 อ่านข้อมูลทีละอักขระด้วย getc() 
      9.5.2 อ่านข้อมูลทีละอักขระด้วย fgetc() 
      9.5.3 อ่านข้อมูลเป็นข้อความด้วย fgets() 
      9.5.4 อ่านข้อมูลตามรูปแบบด้วย fscanf() 
      9.5.5 อ่านข้อมูลทีละเรคคอร์ดด้วย fread()
      9.5.1 อ่านข้อมูลทีละอักขระด้วย getc()      ฟังก์ชัน getc( ) ใช้ในการอ่านข้อมูลชนิดอักขระจากไฟล์ โดยจะอ่านออกมาทีละ 1 อักขระเท่านั้น ซึ่งถูกนิยามไว้ในแฟ้ม stdio.h และมีรูปแบบการใช้งานดังนี้
     รูปแบบ
variable = getc(fp);
 
โดยที่variableหมายถึงตัวแปรชนิด char เพื่อใช้เก็บค่าของตัวอักขระที่อ่านออกมาจากไฟล์
 fpหมายถึงตัวชี้ตำแหน่งไฟล์
      9.5.2 อ่านข้อมูลทีละอักขระด้วย fgetc()      ฟังก์ชัน fgetc( ) เป็นฟังก์ชันที่ถูกนิยามไว้ในแฟ้ม stdio.h ใช้ในการอ่านข้อมูลชนิดอักขระจากไฟล์ เช่นเดียวกันกับฟังก์ชัน getc() โดยมีรูปแบบการใช้งานดังนี้
     รูปแบบ
variable = fgetc(fp);
 
โดยที่variableหมายถึงตัวแปรชนิด char เพื่อใช้เก็บค่าของตัวอักขระที่อ่านออกมาจากไฟล์
 fpหมายถึงตัวชี้ตำแหน่งไฟล์
      9.5.3 อ่านข้อมูลเป็นข้อความด้วย fgets()       ฟังก์ชัน fgets( ) เป็นฟังก์ชันที่ถูกนิยามไว้ในแฟ้ม stdio.h จะใช้ในกรณีที่ต้องการอ่านข้อมูลจากไฟล์ออกมาต่อเนื่องกันเป็นข้อความ โดยสามารถกำหนดความยาวของข้อความได้ ซึ่งมีรูปแบบการใช้งานดังนี้
     รูปแบบ
fgets (variable, total, fp);
 
โดยที่variableหมายถึงตัวแปรชุดชนิด char เพื่อใช้เก็บข้อความที่อ่านออกมาจากไฟล์
 totalหมายถึงความยาวของข้อความที่ต้องการอ่านจากไฟล์ โดยจำนวนที่เรากำหนดจะถูกลบออกหนึ่งเพื่อใช้สำหรับ \0 ปิดท้าย
 fpหมายถึงตัวชี้ตำแหน่งไฟล์
      9.5.4 อ่านข้อมูลตามรูปแบบด้วย fscanf()      จากที่ผ่านมาการอ่านข้อมูลจากไฟล์ จะอ่านได้เฉพาะข้อมูลที่เป็นอักขระและข้อมูลที่เป็นข้อความเท่านั้น ในกรณีที่ต้องการอ่านข้อมูลชนิดอื่นๆ เราสามารถเรียกใช้ฟังก์ชัน fscanf () ได้ ซึ่งฟังก์ชัน fscanf ( ) จะใช้อ่านข้อมูลจากไฟล์ โดยสามารถเลือกกำหนดชนิดของข้อมูลที่จะอ่านได้ รูปแบบการใช้ฟังก์ชัน fscanf () ซึ่งคล้ายกับฟังก์ชัน scanf () โดยมีรูปแบบการใช้งานดังนี้
     รูปแบบ
fscanf (fp, "format", &variable);
 
โดยที่fpหมายถึงตัวชี้ตำแหน่งไฟล์
 formatหมายถึงรูปแบบที่ใช้ในการอ่านข้อมูล จากไฟล์ ซึ่งจะเป็นแบบเดียวกับฟังก์ชัน scanf ()
 variableหมายถึงตัวแปรชุดชนิด char เพื่อใช้เก็บข้อความที่อ่านออกมาจากไฟล์
      9.5.5 อ่านข้อมูลทีละเรคคอร์ดด้วย fread()      ฟังก์ชัน fread () ใช้ในการอ่านข้อมูลจากไฟล์มาเก็บไว้ในหน่วยความจำ ณ ตำแหน่งที่เรากำหนด โดยฟังก์ชัน fread () จะอ่านข้อมูลออกมาเป็นหน่วยเรคคอร์ดหรือเป็นชุด ซึ่งขนาดของเรคคอร์ดหรือชุดนั้นเราจะเป็นผู้กำหนดขึ้นเองในหน่วยที่เป็นไบต์ โดยมีรูปแบบการใช้งานดังนี้
     รูปแบบ
fread (ptr, size, total, fp);
 
โดยที่ptrหมายถึงค่าตำแหน่งในหน่วยความจำ ซึ่งจะนำข้อมูลที่อ่านได้มาเก็บไว้
 sizeหมายถึงขนาดของเรคคอร์ด โดยมีหน่วยเป็นไบต์
 totalหมายถึงจำนวนเรคคอร์ดหรือชุดของข้อมูลที่จะอ่าน
 fpหมายถึงตัวชี้ตำแหน่งไฟล์
      ดังนั้น ถ้าเขียนคำสั่งเพื่อเรียกใช้ฟังก์ชัน fread () อ่านข้อมูลจากไฟล์ ดังนี้
                                    fread (&name, 15 , 1, fp);
      จะหมายถึง ให้ทำการอ่านข้อมูลมาเก็บไว้ที่หน่วยความจำในตำแหน่งของตัวแปร name ทำให้ต่อไปเมื่อจะใช้งานข้อมูลที่อ่านมาก็สามารถเรียกใช้ผ่านตัวแปร name ได้ทันที
เขียนข้อมูลลงในไฟล์
      เมื่อเราเขียนโปรแกรมเพื่อเขียนข้อมูลลงในไฟล์ ข้อมูลเหล่านั้นจะถูกเขียนลงในบัฟเฟอร์ก่อน ในระหว่างที่เขียนข้อมูลนั้นี่ตัวชี้ตำแหน่งไฟล์จะเลื่อนตำแหน่งชี้ไป เรื่อยๆ ตามปริมาณของข้อมูลที่ทำการเขียน เมื่อบัฟเฟอร์เต็มหรือทำการปิดไฟล์ข้อมูลเหล่านั้นจึงจะถูกเขียนลงไปในไฟล์ จริงๆ ฟังก์ชันที่ใช้ในการเขียนข้อมูลลงไฟล์มีดังนี้
      9.6.1 เขียนข้อมูลทีละอักขระด้วย putc() 
      9.6.2 เขียนข้อมูลทีละอักขระด้วย fputc() 
      9.6.3 เขียนข้อมูลเป็นข้อความด้วย fputs() 
      9.6.4 เขียนข้อมูลตามรูปแบบด้วย fprintf() 
      9.6.5 เขียนข้อมูลทีละเรคคอร์ดด้วย fwrite()
      9.6.1 เขียนข้อมูลทีละอักขระด้วย putc()       ฟังก์ชัน putc( ) ถูกนิยามไว้ในแฟ้ม stdio.h ซึ่งใช้สำหรับเขียนข้อมูลชนิดอักขระลงในไฟล์ทีละ 1 อักขระเท่านั้น โดยมีรูปแบบการใช้งานดังนี้
     รูปแบบ
putc (ch, fp);
 
โดยที่chหมายถึงอักขระ 1 ตัวซึ่งอาจจะอยู่ในรูปแบบของอักขระจริงๆ (เขียนภายในเครื่องหมาย ' ' ) หรือตัวแปรชนิด char ที่เก็บอักขระเอาไว้ก็ได้
 fpหมายถึงตัวชี้ตำแหน่งไฟล์
      9.6.2 เขียนข้อมูลทีละอักขระด้วย fputc()       ฟังก์ชัน fputc( ) เป็นฟังก์ชันที่ถูกนิยามไว้ในแฟ้ม stdio.h ใช้ในการเขียนข้อมูลชนิดอักขระลงในไฟล์ทีละ 1 อักขระ เช่นเดียวกันกับฟังก์ชัน getc() โดยรูปแบบการเรียกใช้รวมถึงการนำไปใช้งานเหมือนกันทุกอย่าง สามารถใช้แทนกันได้ ซึ่งมีรูปแบบการใช้งานดังนี้
     รูปแบบ
fputc (ch, fp);
 
โดยที่chหมายถึงอักขระ 1 ตัวซึ่งอาจจะอยู่ในรูปแบบของอักขระจริงๆ (เขียนภายในเครื่องหมาย ' ' ) หรือตัวแปรชนิด char ที่เก็บอักขระเอาไว้ก็ได้
 fpหมายถึงตัวชี้ตำแหน่งไฟล์
      9.6.3 เขียนข้อมูลเป็นข้อความด้วย fputs()       ฟังก์ชัน fputs( ) เป็นฟังก์ชันที่ถูกนิยามไว้ในแฟ้ม stdio.h จะใช้ในกรณีที่ต้องการเขียนข้อมูลประเภทข้อความลงไฟล์ ซึ่งมีรูปแบบการใช้งานดังนี้
     รูปแบบ
fputs (str, fp);
 
โดยที่strหมายถึงข้อความที่ต้องการเขียนลงในไฟล์ โดยอาจจะเป็นข้อความที่เขียนภายในเครื่องหมาย " " หรือตัวแปรที่เก็บข้อความเอาไว้ก็ได้เช่นกัน
 fpหมายถึงตัวชี้ตำแหน่งไฟล์
      9.6.4 เขียนข้อมูลตามรูปแบบด้วย fprintf()       นอกจากการเขียนอักขระและข้อความลงในไฟล์แล้ว ข้อมูลชนิดอื่นอย่างเช่นตัวเลข ก็สามารถเขียนลงในไฟล์ได้เช่นกัน ด้วยฟังก์ชัน fprintf () ซึ่งใช้สำหรับเขียนข้อมูลลงในไฟล์ โดยสามารถกำหนดชนิดของข้อมูลที่ต้องการได้ รูปแบบการเรียกใช้จะมีลักษณะคล้ายกับฟังก์ชัน printf () โดยมีรูปแบบการใช้งานดังนี้
     รูปแบบ
fscanf (fp, "control", value);
 
โดยที่fpหมายถึงตัวชี้ตำแหน่งไฟล์
 controlหมายถึงส่วนที่ใช้ควบคุมรูปแบบของข้อมูลที่จะเขียนลงในไฟล์ ซึ่งมีการใช้งานเหมือนฟังก์ชัน printf ()
 valueหมายถึงค่าของตัวแปร หรือนิพจน์ ที่ต้องการเขียนลงในไฟล์ โดยถ้ามีมากกว่าหนึ่งตัว ให้ใช้เครื่องหมาย , (comma) คั่นระหว่างแต่ละตัว
      9.6.5 เขียนข้อมูลทีละเรคคอร์ดด้วย fwrite()       ฟังก์ชัน fwrite () จะทำงานตรงกันข้ามกับฟังก์ชัน fread () โดยฟังก์ชัน fwrite () ใช้สำหรับเขียนข้อมูลจากตำแหน่งในหน่วยความจำลงไปในไฟล์ โดยในการเขียนข้อมูลจะใช้หน่วยเรคคอร์ด ซึ่งเราเป็นผู้กำหนดขนาดของแต่ละเรคคอร์ดและจำนวนเรคคอร์ดของข้อมูลที่จะ เขียนลงในไฟล์เอง โดยมีรูปแบบการใช้งานดังนี้
     รูปแบบ
fwrite (ptr, size, total, fp);
 
โดยที่ptrหมายถึงตำแหน่งในหน่วยความจำของข้อมูลที่จะเขียนลงในไฟล์
 sizeหมายถึงขนาดของเรคคอร์ด โดยมีหน่วยเป็นไบต์
 totalหมายถึงจำนวนเรคคอร์ดหรือชุดของข้อมูลที่ต้องการเขียนลงในไฟล์
 fpหมายถึงตัวชี้ตำแหน่งไฟล์
 
ตัวชี้ตำแหน่งไฟล์
      เมื่อเปิดไฟล์ได้สำเร็จ ตัวชี้ตำแหน่งไฟล์จะถูกกำหนดให้ชี้ไปยังข้อมูลแรกของไฟล์ และโดยปกติทุกครั้งหลังจากการเขียนหรืออ่านข้อมูลแต่ละครั้ง ตัวชี้ตำแหน่งไฟล์จะเลื่อนไปยังข้อมูลถัดไปโดยอัตโนมัติ แต่ในภาษาซียังมีฟังก์ชันอีกกลุ่มหนึ่งที่ใช้ควบคุมตัวชี้ตำแหน่งไฟล์ตามต้องการ ซึ่งฟังก์ชันกลุ่มนี้ประกอบไปด้วย
      9.7.1 กำหนดตำแหน่งไปที่จุดเริ่มต้นไฟล์ด้วย rewind () 
      9.7.2 หาค่าตำแหน่งของตัวชี้ตำแหน่งด้วย ftell () 
      9.7.3 ย้ายตำแหน่งตัวชี้ด้วย fseek ()

      9.7.1 กำหนดตำแหน่งไปที่จุดเริ่มต้นไฟล์ด้วย rewind ()      ฟังก์ชัน rewind () ใช้ในการเลื่อนตัวชี้ตำแหน่งไฟล์ให้กลับไปที่จุดเริ่มต้นไฟล์ โดยมีรูปแบบการใช้งานดังนี้
     รูปแบบ
rewind (fp);
 
โดยที่fpหมายถึงตัวชี้ตำแหน่งไฟล์
      9.7.2 หาค่าตำแหน่งของตัวชี้ตำแหน่งด้วย ftell ()       ในกรณีที่ต้องการจะรู้ตำแหน่งปัจจุบันในไฟล์ที่ตัวชี้ตำแหน่งไฟล์ทำการชี้อยู่ สามารถทำได้โดยเรียกใช้ฟังก์ชัน ftell ( ) ซึ่งมีรูปแบบการใช้งานดังนี้
     รูปแบบ
ftell (fp);
 
โดยที่fpหมายถึงตัวชี้ตำแหน่งไฟล์
      9.7.3 ย้ายตำแหน่งตัวชี้ด้วย fseek ()       ฟังก์ชัน fseek ( ) เป็นฟังก์ชันที่ถูกนิยามไว้ในแฟ้ม stdio.h จะใช้ในการย้ายตัวชี้ตำแหน่งไฟล์ไปยังตำแหน่งที่ต้องการภายในไฟล์ได้ ซึ่งมีรูปแบบการใช้งานดังนี้
     รูปแบบ
fseek (fp, offset, referent);
 
โดยที่fpหมายถึงตัวชี้ตำแหน่งไฟล์
 referentหมายถึงตำแหน่งอ้างอิงในการเลื่อนตัวชี้ตำแหน่งไฟล์ ซึ่งมีอยู่ 3 แบบด้วยกัน คือ
SEEK_SET   :   ตำแหน่งเริ่มต้นไฟล์
SEEK_CUR   :   ตำแหน่งปัจจุบันที่ตัวชี้ตำแหน่งไฟล์อยู่
SEEK_END   :   ตำแหน่งจบไฟล์
 offsetหมายถึงจำนวนไบต์ที่ต้องการเลื่อนตัวชี้ตำแหน่งไฟล์
      เช่น fseek (f1, 0L, 0) หมายถึง เป็นการเลื่อนตัวชี้ตำแหน่งไฟล์ไปที่จุดเริ่มต้นของไฟล์
 
การลบไฟล์
      ในกรณีที่ไม่ต้องการใช้งานไฟล์ใดแล้ว สามารถลบทิ้งได้โดยใช้ฟังก์ชัน remove () ซึ่งมีรูปแบบการใช้งานดังนี้
     รูปแบบ
remove (name);
 
โดยที่nameหมายถึงชื่อไฟล์ที่ต้องการจะลบ
      เมื่อเรียกใช้ฟังก์ชัน remove () ทำการเปลี่ยนลบไฟล์แล้ว ค่าที่ได้กลับจากฟังก์ชันจะเป็นผลการทำงาน โดยถ้าสามารถลบไฟล์ได้สำเร็จจะให้ค่าเป็น 0 แต่ถ้าไม่สามารถลบไฟล์ได้ ค่าที่ได้กลับมาจะไม่ใช่ 0 ดังตัวอย่าง
      ตัวอย่าง      โปรแกรมแสดงการทำงานของฟังก์ชัน remove ()
#include <stdio.h>
main()
{
      int result;
      result = remove ( "a:/file1.txt" );
      if ( !result ) {
            printf ( "Success" );
      }
      else {
            printf ( "Fail" );
      }
}
     โปรแกรมข้างต้นจะทำการลบไฟล์ที่ชื่อ file1.txt ซึ่งอยู่ที่ไดร์ฟ A: โดยถ้าสามารถลบได้จะแสดงข้อความว่า Success แต่ถ้าไม่สามารถลบได้ จะแสดงข้อความว่า Fail
การเปลี่ยนชื่อไฟล์
      ในกรณีที่ต้องการเปลี่ยนชื่อของไฟล์ สามารถทำได้โดยใช้ฟังก์ชัน rename () ซึ่งมีรูปแบบการใช้งานดังนี้
     รูปแบบ
remove (old, new);
 
โดยที่oldหมายถึงชื่อไฟล์เดิมที่ต้องการจะเปลี่ยนชื่อ
 newหมายถึงชื่อไฟล์ใหม่ทีจะเปลี่ยนไปใช้
      เมื่อเรียกใช้ฟังก์ชัน rename () ทำการเปลี่ยนชื่อไฟล์แล้ว ค่าที่ได้กลับจากฟังก์ชันจะเป็นผลการทำงาน โดยถ้าสามารถเปลี่ยนชื่อไฟล์ได้สำเร็จจะให้ค่าเป็น 0 แต่ถ้าไม่สามารถเปลี่ยนชื่อไฟล์ได้ ค่าที่ได้กลับมาจะไม่ใช่ 0 ดังตัวอย่าง
      ตัวอย่าง      โปรแกรมแสดงการทำงานของฟังก์ชัน rename ()
#include <stdio.h>
main()
{
      int result;
      result = rename ( "a:/file1.txt", "a:/filea.txt" );
      if ( !result ) {
            printf ( "Success" );
      }
      else {
            printf ( "Fail" );
      }
}
 
     โปรแกรมข้างต้นจะทำการเปลี่ยนชื่อไฟล์ที่ชื่อ file1.txt ซึ่งอยู่ที่ไดร์ฟ A: ให้เป็นชื่อ filea.txt โดยถ้าสามารถเปลี่ยนได้จะแสดงข้อความว่า Success แต่ถ้าไม่สามารถเปลี่ยนชื่อได้ จะแสดงข้อความว่า Fail

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Set Enable .Net framework 3.5 on windows 10 (ติดตั้ง .Netframework 3.5 บนวินโดวน์ 10)

1. Download windows 8.1 file [ TH : ดาวน์โหลดไฟล์ ของ windows 8.1 ] 2. Mount File windows Copy file \sources\sxs from mount drive ...