2010-02-04 16 views
18

Estoy recibiendo la ruta al directorio actual con el sistema de archivos boost, luego verificando si el directorio existe.boost :: filesystem exists() en la ruta del directorio falla, pero is_directory() está bien

is_directory() está bien, pero exists() falla en el mismo camino, ¿me falta algo?

Ejemplo código (impulsar 1.35):

#include <boost/filesystem/operations.hpp> 
#include <boost/filesystem/path.hpp> 

namespace fs = boost::filesystem; 

// the path is full path /home/my/somedirectory  
fs::path data_dir(fs::current_path()); 

fs::is_directory(data_dir) // true, directory exists 

fs::exists(data_dir) // false 
exists(status(data_dir)) // false 

EDIT:

#include <boost/filesystem/operations.hpp> 
#include <boost/filesystem/path.hpp> 
namespace fs = boost::filesystem; 

fs::path data_dir(fs::current_path()); 
// data_dir == "/home/myusername/proj/test" 

if (fs::is_directory(data_dir))    // true - is directory 
if (fs::is_directory(fs::status(data_dir))) // true - it is still a directory 

parte Fun:

if (fs::exists(fs::status(data_dir)))  // true - directory exists 
if (fs::exists(data_dir))     // true - directory exists 

PERO:

if (!fs::exists(fs::status(data_dir)))  // false - directory still exists 
if (!fs::exists(data_dir))    // true - directory does not exists 
+1

¿Estás usando Windows? Esta es una limitación conocida de la API subyacente de Windows. –

+0

Funciona para mí en Windows. – interjay

Respuesta

17

El siguiente es desde el código fuente Boost:

inline bool is_directory(file_status f) { return f.type() == directory_file; } 
inline bool exists(file_status f)  { return f.type() != status_unknown && f.type() != file_not_found; } 

Como se puede ver, si is_directory vuelve verdad, entonces hay que volver exists cierto. Tal vez el problema esté en otro lugar de tu código: publica un ejemplo compilable mínimo que muestre el problema.

Es posible que también desee probar el mismo objeto file_status para ambas llamadas, para ver si la salida status está cambiando.

+0

Ya he publicado el código anterior – stefanB

+4

Ha publicado algunos fragmentos, no es un ejemplo compilable. – interjay

+0

Por cierto, estoy pasando 'ruta' a' exists() 'not' file_status', hay una función que acepta 'ruta' y devuelve' existe (estado (ruta)) 'según la documentación – stefanB

Cuestiones relacionadas