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

สุดท้ายเราก็หามันจนเจอ

การจัดการไฟล์


ชนิดของไฟล์
        ไฟล์ (files)หรือแฟ้ม ที่จะศึกษากันนี้แบ่งเป็น 2 ชนิด คือ
     1. แฟ้มข้อความ หรือ text files  ไฟล์ประเภทนี้จะจัดเก็บข้อมูลเป็นข้อความในรูปของรหัสแอสกี (ASCII) ไฟล์ประเภทนี้ ส่วนมามีส่วนขยาย เป็น txt , bat  c ini nfg log bak  หรืออื่น ๆ ไฟล์เหล่านี้สามารถเปิดได้โดยใช้ text editor  เช่น  notepad โดยจะปรากฏเป็นข้อความ ไฟล์เหล่านนี้เมื่อใช้รหัสบางอย่าง เช่น \n เวลาบันทึกไฟล์ จะถูกเปลี่ยนเป็น  รหัส carriage return หรือ line feed และเมื่ออ่านไฟล์เหล่านี้รหัสนี้จะถูกเปลี่ยนเป็น \n  
      2. แฟ้มในระบบเลขฐานสอง หรือ binary files ไฟล์เหล่านี้จัดเก็บข้อมูลไว้ในรูปเลขฐานสอง เมื่อบันทึกไฟล์ประเภทนี้ จะไม่เปลี่ยนรหัสคำสั่ง เช่น \n เป็น carriage return หรือ line feed  ไฟล์ประเภทนี้ไม่สามารถเปิดด้วย notepad เปิดขึ้นมาจะได้สัญลักษณ์ต่าง ๆ ซึ่งดูไม่รู้เรื่อง ต้องเปิดด้วยโปรแกรมเฉพาะที่จัดการกับแฟ้มเหล่านั้น เช่น ไฟล์ที่มีส่วนขยาย xls doc exe com bmp gif  dat  jpg เป็นต้น

ขั้นตอนการจัดการกับไฟล์ หรือขั้นตอนในการเขียนโปรแกรมกับไฟล์
      อาจพิจารณาแบ่งเป็น 3 ขั้นตอน คือ
1. การเปิดไฟล์
2. การประมวลผลข้อมูลในไฟล์ เช่น การอ่าน การจัดเก็บ การแก้ไข การเพิ่ม และ การลบข้อมูล
3. การปิดไฟล์
                ในการจัดกระทำกับไฟล์ เช่น การแก้ไข การเพิ่ม ฯลฯ ไม่ได้กระทำกับไฟล์ที่เก็บอยู่ในดิสก์ หรือ ฮาร์ดดิสก์ โดยตรง แต่กระทำกับพื้นที่ในหน่วยความจำ(memory) ซึ่งเป็นเครื่องคอมพิวเตอร์จัดเตรียมไว้เพื่อประมวลผลเกี่ยวกับไฟล์ หน่วยความจำที่จัดเตรียมไว้เพื่อเป็นตัวกลางในการประมวลผลกับไฟล์นี้เรียกว่า บัฟเฟอร์ เข่น ถ้าจะกระทำการกับไฟล์ 3 ไฟล์ คือ ไฟล์ x ,y ,z  คอมพิวเตอร์จะเตรียมบัฟเฟอร์ไว้ 3 ส่วนสำหรับแต่ละไฟล์
                ไฟล์ในภาษาซีมีการจัดเก็บในลักษณะเรียงต่อกันไปตั้งแต่ต้นจนจบไม่มีการแบ่งเป็นช่วง ดังนั้นการจะกระทำกับข้อมูลในไฟล์จะต้องระบุตำแหน่ง สิ่งที่ใช้ในการหาตำแหน่งของข้อมูลในไฟล์  โดยใช้ตัวชี้ตำแหน่งไฟล์ เรียกว่า ไฟล์พอยน์เตอร์ (file pointer) โดยเมื่อเปิดไฟล์จะต้องมีการสร้างตัวชี้ไฟล์หรือไฟล์พอยน์เตอร์ ซึ่งจะชี้ไปยังตำแหน่งเริ่มต้นของไฟล์ และเปลี่ยนตำแหน่งไปยังตำแหน่งที่ถูกระบุ ในการประมวลผลหลายไฟล์ แต่ละไฟล์จะมีตัวชี้ตำแหน่งเป็นของมันเองไม่ได้ใช้ร่วมกับไฟล์อื่น

การเปิดไฟล์
                การเปิดไฟล์จะต้องใช้คำสั่ง 2 คำสั่ง คำสั่งแรกเป็นคำสั่งสร้างพอยน์เตอร์ สำหรับไฟล์ เรียกว่า file pointer สำหรับเก็บค่าตำแหน่งของตัวชี้ไฟล์ และคำสั่งหรือฟังก์ชันในการเปิดไฟล์ คำสั่งสร้างพอยน์เตอร์ เป็น ดังนี้                                FILE  *pointer_name;
โดย   FILE เป็นคำสั่งสำหรับสร้างพอยน์เตอร์ ใช้ตัวพิมพ์ใหญ่ ทั้งคำ
          *  เป็นเครื่องหมายแสดงว่าเป็น พอยน์เตอร์

                pointer_name เป็นชื่อของตัวแปรที่ใช้เก็บค่าของพอยน์เตอร์
                จากนั้นเปิดไฟล์ โดยใช้ฟังก์ชัน fopen() ซี่งอยู่ในไฟล์เฮดเดอร์ คือ stdio.h จึงต้องใช้คำสั่ง #include ว้ด้วย การเปิดไฟล์จะนำค่าตำแหน่งของตัวชี้ไฟล์เก็บไว้ในตัวแปร ที่เกิดจากคำสั่งสร้างพอยน์เตอร์ ดังนี้               pointer_name = fopen("file_name","file_mode");
โดย pointer_name    คือ ชื่อตัวแปรที่สร้างขึ้นในคำสั่งสร้างไฟล์พอยน์เตอร์(คำสั่ง FILE)
        fopen  เป็นฟังก์ชันที่ใช้เปิดไฟล์    file_name ชื่อของไฟล์ที่จะเปิด โดยต้องอยู่ในเครื่องหมายคำพูด และต้องบอกเส้นทาง (ถ้าจำเป็น เมื่อไฟล์ที่สร้างไม่ได้อยู่ในโฟลเดอร์เดียวกับโปรแกรม)
        "file_mode" คือรูปแบบลักษณะของไฟล์ที่เปิด โดยต้องอยู่ในเครื่องหมายคำพูดเช่นเดียวกัน  file_mode นี้จะต้องสอดคล้องกับเป้าหมายในการเปิดไฟล์ โดย file_mode มี ดังตาราง

mode

ความหมาย
text file
binary file
"r","rt"
"rb"
เปิดไฟล์เก่าที่มีอยู่แล้วเพื่ออ่านข้อมูลจากไฟล์อย่างเดียว
สิ่งต้องระวัง  ถ้าไม่มีไฟล์นั้น จะเปิดไฟล์ไม่ได้
"w","wt"
"wb"
เปิดไฟล์ใหม่เพื่อบันทึกข้อมูลไว้ในไฟล์อย่างเดียว
สิ่งต้องระวัง  ถ้ามีไฟล์นั้นเป็นไฟล์ที่มีอยู่แล้วข้อมูลเดิมในไฟล์จะถูกลบทิ้ง และสร้างไฟล์ใหม่ในชื่อเดิม
"a","at"
"ab"
เปิดไฟล์เก่าที่มีข้อมูล เปิดเพื่อเพิ่มข้อมูลใหม่ไปต่อท้ายข้อมูลเดิม ไปเป็นชุดสุดท้ายของข้อมูล สิ่งต้องระวัง  ถ้ามีไฟล์นั้นเป็นไฟล์ใหม่ จะเป็นการสร้างไฟล์ใหม่แต่บันทึกข้อมูลได้ครั้งเดียว
"r+t"
"r+b"
เปิดไฟล์ที่มีอยู่แล้ว เพื่ออ่านและบันทึกข้อมูลไปเก็บในไฟล์
สิ่งต้องระวัง   ถ้าใช้ mode นี้เพื่อบันทึกข้อมูลร่วมกับฟังก์ชันบันทึกข้อมูลลงไฟล์ จะทำให้บันทึกข้อมูลใหม่ทับข้อมูลเก่าตั้งแต่ต้นไฟล์จนถึงท้ายไฟล์ทำให้ข้อมูลเก่าถูกแทนที่ด้วยข้อมูลใหม่
"w+t"
"w+b"
เปิดไฟล์ใหม่เพื่อบันทึกข้อมูล เพื่ออ่านและบันทึกข้อมูลลงไปในไฟล์
สิ่งต้องระวัง  ถ้าไฟล์ที่ระบุเป็นไฟล์ที่กำลังถูกใช้งานอยู่ จะเป็นการทำลายข้อมูลเดิมในไฟล์ทั้งหมดและสร้างไฟล์ใหม่แทนที่
"a+t"
"a+b"
เปิดไฟล์ที่มีอยู่แล้วเพื่ออ่านข้อมูลจากไฟล์ และเพิ่มข้อมูลเข้าไปท้ายไฟล์
สิ่งต้องระวัง ถ้าไฟล์ข้อมูลที่ระบุให้เปิดเป็นไฟล์ใหม่จะเป็นการสร้างไฟล์ใหม่ตามชื่อที่ระบุ และบันทึกข้อมูลใหม่