## 高度なトピック

### ディレクトリ

アーカイブエントリがディレクトリであるかどうかは、ヘッダのメンバ関数`is_directory()`で調べることができる。

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

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

    void extract_entry(ar::tar_file_source& tar)
    {
        const ar::tar::header& head = tar.header();

        if (head.is_directory())
            fs::create_directory(head.path);
        else
        {
            fs::ofstream file(head.path, std::ios_base::binary);
            io::copy(tar, file);
        }
    }

一方、アーカイブにディレクトリのエントリを作成するには、メンバ関数`type()`でファイル種別を`hamigaki::filesystem::directory_file`に設定したヘッダを使用する。

    #include <hamigaki/archivers/tar_file.hpp>

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

    void append_directory(ar::tar_file_sink& tar, const fs::path& ph)
    {
        ar::tar::header head;
        head.path = ph;
        head.type(hamigaki::filesystem::directory_file);
        tar.create_entry(head);
    }

| 製作著作 © 2006-2008 Takeshi Mouri