|
アーカイブエントリがディレクトリであるかどうかは、ヘッダのメンバ関数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 |