ข้ามไปที่เนื้อหาหลัก

ไฟล์และไดเรกทอรีด้วยชุดไลบรารี boost

ต่อจาก ชุดไลบรารี date_time ของ Boost วันนี้เลยบันทึกเกี่ยวกับการจัดการไฟล์และไดเรกทอรีด้วยชุดไลบรารีของ boost สักนิด สำหรับชุดที่สนใจคือ filesystem สำหรับ filesystem เองหากพิจารณาแล้วมี class ที่น่าสนใจคือ path directory_entry directory_iterator recursive_directory_iterator file_status ที่อาจจะต้องใช้งานแล้วแต่กรณี แต่ที่ใช้ประจำเห็นคงหนีไม่พ้น path เนื่องจากเป็น class ที่ใช้ระบุตำแหน่งไฟล์นั้นเอง ส่วนที่เหลือจะเป็น operational functions ที่ใช้ร่วมกับ class ที่กล่าวไปแล้ว แต่ส่วนใหญ่จะใช้งานออปเจคของ path นั้นเอง มาดูตัวอย่างแรกกันดีกว่า
// directory.cpp
#include <iostream>
#include <string>
#include <boost/filesystem.hpp>

using namespace std;
using namespace boost::filesystem;

int main(){

string directory_path = "/tmp/test";

path p(directory_path);
if (exists(p))
cout << p << " exists" << endl;
else{
cout << p << " does not exist" << endl;
if (create_directory(p))
  cout << "create directory:" << directory_path << endl;
else
  cout << "can not create directory:" << directory_path << endl;
}

return 0;
}
จากตัวอย่างด้านบนเป็นการตรวจสอบว่ามีไดเรกทอรี /tmp/test ปรากฏอยู่หรือเปล่า หากไม่มีให้สร้างไดเรกทอรีขึ้นมาใหม่ ผลจากการทดสอบ

$ g++ directory.cpp -lboost_filesystem -lboost_system
$ ./a.out
"/tmp/test" does not exist
create directory:/tmp/test
$ ./a.out
"/tmp/test" exists

ลองดูตัวอย่างง่ายๆ อีกตัวอย่างหนึ่ง
// directory_1.cpp
#include <iostream>
#include <string>
#include <boost/filesystem.hpp>
using namespace std;
using namespace boost::filesystem;

int main(int argc, char** argv)
{
  if (argc < 2) {
      cerr << "type arg "<<endl;
      return -1;
  }

  path p (argv[1]);  

  if (exists(p)){
      if (is_regular_file(p))        
        cout << p << " size is " << file_size(p) << endl;
      else if (is_directory(p))
        cout << p << " is a directory" << endl;
      else
        cout << p << " neither a regular file nor a directory" <<endl;
    }
    else
      cout << p << " does not exist" << endl;

  return 0;
}

จากโคดด้านบนเป็นการตรวจสอบว่า path ที่ระบุไว้เป็นไฟล์หรือไดเรกทอรี หากเป็นไฟล์ให้แสดงขนาดออกมา

$ g++ directory_1.cpp -lboost_system -lboost_filesystem
$ ./a.out /tmp
"/tmp" is a directory
$ ./a.out /tmp/a
"/tmp/a" does not exist
$ touch /tmp/b
$ ./a.out /tmp/b
"/tmp/b" size is 0
$ echo "hello world" >> /tmp/c
$ ./list-1 /tmp/c
"/tmp/c" size is 12

นอกจากนี้ยังสามารถศึกษาเพิ่มเติมได้ที่ Boost Filesystem Tutorial

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

ตัวเอ๋ยตัวผม

กลอนนี้ใช้เวลาประมาณ 20 นาทีเขียนขึ้นมาในห้องเรียนวิชาสัมนา 1 เพราะอาจารย์อยากให้แนะนำตัวเองเป็นกลอน ไม่รู้จะแต่งว่าไงเลยแต่งออกมาเป็นดอกสร้อย เห็นว่าพอใช้ได้เลยเอามาลงไว้เป็นอนุสร ๏ ตัวเอ๋ยตัวผม นิยมในพระพุทธศาสนา ตั้งจิตตั้งใจตั้งหน้า ใฝ่หาความรู้สู่ตน ตั้งใจศึกษาให้เชี่ยวชาญ ชำนาญในศาสตร์ที่ฝึกฝน ฝึกจิตฝึกสันดานให้เป็นคน เป็นชนในชาติที่ดีเอย ๚ะ๛

บันทึกการจัดงานศพ: พิธีฌาปนกิจศพ

ตรงส่วนนี้คงจะเขียนเกี่ยวกับพิธียกศพออกจากบ้าน และเกร็ดต่างๆ เล็กๆ น้อยๆ เนื่องจากที่จัดงานจะไม่นิยมไว้ศพที่วัด จะไว้ศพที่บ้าน และถ้าเป็นไปได้จะไว้ศพในบ้านเสียด้วยซ่ำ เมื่อถึงวันฌาปนกิจศพ หรือเผาศพ ก็จะมีการเซ่นไหว้ครั้งใหญ่ก่อนเคลื่อนย้ายศพไปวัดเพื่อฌาปนกิจ เครื่องเซ่นไว้จะประกอบไปด้วย ข้าว 5 ถ้วย กับข้าว 5 อย่าง หัวหมู ไก่ต้ม ไข่ต้ม หมูสามชั้นต้ม หมี่เหลืองผัด กุ้ง หอย ปู ปลา ผลไม้ 5 อย่าง ขนมขึ้น เมื่อมีการเซ่นไหว้ทุกครั้งจะต้องมี สัปรด น้ำชา 3 จอก เหล้าขาว 5 จอก(หลานๆ บอกว่าเจ็คไม่กินเหล้าขาว แต่มีคนบอกว่าเป็นการไหว้ตามประเพณี ^^ ) ซึ่งแต่ละอย่างมีความหมาย แต่ผมจำไม่ได้ต้องหาอีกครั้งนึง ตัวอย่างเครื่องเซ่นไหว้ เมื่อถึงพิธีเซ่นไหว้ จะมีการเซ่นไหว้โดยแบ่งออกเป็นคณะ แต่เพื่อความสะดวกและรวบรัดจึงมีการไหว้เพียงไม่กี่คณะ ซึ่งก็เหมือนเดิมคือผู้ที่มีศักดิ์สูงกว่าจะไม่รวมการเซ่นไหว้ครั้งนี้ คณะแรกจะเป็นผู้ไกล้ชิดผู้ตายมากที่สุดเริ่มตั้งแต่ลูกและภรรยา หลังจากนั้นก็จะเป็นน้องๆ แล้วก็หลานๆ และก็มิตรรักและผู้คนที่นับถือผู้ตาย หากเป็นเมื่อสมัยก่อนนั้น ต้องแยกออกเป็นเขย เป็นสะไภ้ ไหว้กันหลายยกหล

ด้วยระลึกถึงคุณย่า บันทึกจากความทรงจำ

บันทึกนี้เขียนขึ้นเพื่อบันทึกความทรงจำของผมที่มีต่อคุณย่าที่ล่วงลับไปแล้วอย่างไม่มีวันหวนคืน คุณย่าเปรียบเหมือนฟางเส้นสุดท้ายที่ร้อยครอบครัวใหญ่ของเราเอาไว้ไม่ให้แตกแยก หลังจากที่เสียคุณปู่ไปเมื่อ 23 ปีก่อน เนื่องจากบริเวณจังหวัดกระบี่ ตรัง พังงา ภูเก็ต มีชาวจีนอาศัยอยู่มาก แต่มักจะเป็นชาวจีนที่อพยพมาไทยนานแล้ว จากการการสังเกตของผม ชาวจีนแถบนี้โดยมากน่าจะเป็นชาว เปอรานากัน หรือชาวจีนที่อพยพมาจากจีนแล้วตั้งถิ่นฐานอยู่ในแหลมลายูหรืออินโดนีเซีย แล้วหลังจากนั้นจึงอพยพมาอาศัยต่อที่ประเทศไทย จากการบอกเล่าของคุณแม่ ก๋งเคยเล่าให้ฟังว่าตอนยังเด็กเคยแจวเรือจ้างอยู่ที่ปีนัง คุณย่าเคยเล่าว่าเป็นชาวฮกเกี้ยน อีกทั้วจากรูปวาดคุณย่าทวดที่มีการเกล้ามวยผม สวมเสื้อคอลึก ส่วนทางบ้านมีการใช้คำเรียกจีนผสมไทยถิ่นใต้อยู่มาก ผู้หญิงทุกคนนิยมสวมผ้าปาเต๊ะ เสื้อลูกไม้ (เสื้อฉลุลายดอกไม้) อาหารการกินเป็นแบบชาวไทยถิ่นใต้ทุกประการ (กินน้ำพริก แกงส้มเก่งกันทุกคน ยกเว้นก๋ง :D) อีกทั้งก๋งเกิดที่ดินแดนแถบนี้ไม่ได้เดินทางมาจากเมืองจีน (บางทีเรียก เตี่ยต่อเตี่ย คือ ทวดมาจากจีน ส่วนสถานที่เกิดไม่แน่ใจว่าเป็นปีนังหรือไทย)