Además de estas dificultades, que plagan nuestro código de #ifdef win32 #elseif.... , otros problemas que muchas veces nos hace acabar recurriendo al socorrido system(cmd). Con boost tenemos un codigo unificado que no desordea nuestro codigo y que nos permite interactuar con el sistema de ficheros. Podemos añadirlo con la cabecera:
#include "boost/filesystem.hpp"
Lo primero que tenemos que conocer es la clase path. La declaramos asi:
boost::filesystem::path ruta("myDir");
Otra cosa importante es que el operator/ esta sobrecargado y hace la concatenacion de directorios. Junto con la ruta declarada antes, podriamos hacer:
boost::filesystem::path ruta("myDir");
boost::filesystem::path root("myRootDir");
boost::filesystem::path completeRoot = root / ruta;
// podriamos hacer lo mismo pero ahorrando una variable con root /= ruta
Dentro de la libreria podemos encontrar algunas funciones muy útiles para borrar y crear directorios y archivos:
boost::filesystem::create_directory("dir");
boost::filesystem::remove_all("file");
E incluso para saber si existe un archivo, conocer si es un directorio, un archivo o un link
boost::filesystem::exists("file");
if(boost::filesystem::is_directory("file"))
{}
Para acabar, los iteradores nos permiten recorrer los contenidos de un determinado directorio:
boost::filesystem::directory_iterator end_iter;
boost::filesystem::directory_iterator dir_iter(directory);
for(dir_iter; dir_iter != end_iter; ++dir_iter)
{
}
En zeleste2D, esta es la funcion para crear recursivamente una ruta que no existe:
//TODO: Would this method be more general and live outside this class??
bool pathCreator( boost::filesystem::path& path_to_create )
{
if (!fs::exists(path_to_create))
{
pathCreator(path_to_create.parent_path());
}
//if not create the directory
fs::create_directory(path_to_create);
return true;

