2009-09-03 14 views
9

lo que es una manera conveniente de crear un directorio cuando se le da una trayectoria de esta manera: "\ servidor \ foo \ bar \"C++ cómo crear un directorio desde una ruta

nota de que no pueden existir los directorios intermedios .

CreateDirectory y mkdir solo parecen crear la última parte de un directorio y dar un error en caso contrario.

la plataforma es Windows, compilador MSVC.

gracias!

Respuesta

7

SHCreateDirectoryEx() puede hacer eso. Está disponible en XP SP2 y versiones más nuevas de Windows.

+2

Obsoleto: "[Esta función está disponible a través de Windows XP Service Pack 2 (SP2) y Windows Server 2003. Puede estar alterada o no disponible en versiones posteriores de Windows.]" – Technophile

+2

@Technophile - Según MSDN, 'SHCreateDirectory' está en desuso después de XP SP2 & Server 2003 (http://msdn.microsoft.com/en-us/library/bb762130(v=vs.85).aspx). No menciona 'SHCreateDirectoryEx' en desuso. – Ferruccio

+1

Parece que actualmente SHCreateDirectory ** Ex ** también está en desuso: msdn.microsoft.com/en-us/library/bb762131(v=vs.85).aspx – sergiol

1

Escribo un bucle. Divida la ruta en componentes y "camine", es decir, comenzando desde el principio, verifique si existe. Si lo hace, ingrésalo y continúa. Si no es así, créelo, ingréselo y continúe. Para puntos de bonificación, detectar si existe un componente, pero es un archivo en lugar de un directorio.

+0

gracias, buena idea. aunque esperaría una función en el winapi o el stl que hace exactamente esto? – clamp

24

Si puede utilizar una biblioteca externa, me vería en boost::filesystem

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

int main(int argc, char** argv) 
{ 
    fs::create_directories("/some/path"); 
} 
0

También puede utilizar create_directories plantilla bool (const Ruta & p) de Boost::Filesystem biblioteca. Y está disponible no solo en Windows.

Cuestiones relacionadas