チュートリアルを書き始めました

ArchiverとExtractorのコンセプトをまとめて、チュートリアルを書き始めました。
http://hamigaki.sourceforge.jp/doc/html/Archiver.html
http://hamigaki.sourceforge.jp/doc/html/Extractor.html


最初の例として圧縮がないため単純なtarを選びました。

#include <hamigaki/archivers/tar_file.hpp>
#include <boost/filesystem/fstream.hpp>
#include <boost/filesystem/operations.hpp>
#include <boost/iostreams/copy.hpp>

namespace ar = hamigaki::archivers;
namespace fs = boost::filesystem;
namespace io = boost::iostreams;

void append_file(ar::tar_file_sink& tar, const fs::path& ph)
{
    ar::tar_file_sink::header_type head;
    head.path = ph;
    head.file_size = fs::file_size(ph);
    tar.create_entry(head);

    fs::ifstream file(ph, std::ios_base::binary);
    io::copy(file, tar);
}

int main()
{
    ar::tar_file_sink tar("test.tar");

    append_file(tar, "foo.txt");
    append_file(tar, "bar.txt");

    tar.close_archive();
}

単純とは言えませんが、これぐらいのサイズなら許容範囲内でしょう。
この例ではタイムスタンプやパーミッションが保存されないので注意。