2009-09-03 17 views
9

quello che è un modo conveniente per creare una directory in cui viene dato un percorso come questo:C++ come creare una directory da un percorso

nota che non possono esistere le directory intermedie "\ server \ foo \ bar \" .

CreateDirectory e mkdir sembrano solo creare l'ultima parte di una directory e dare altrimenti un errore.

la piattaforma è Windows, compilatore MSVC.

grazie!

risposta

7

SHCreateDirectoryEx() può farlo. È disponibile su XP SP2 e versioni più recenti di Windows.

+2

Obsoleto: "[Questa funzione è disponibile tramite Windows XP Service Pack 2 (SP2) e Windows Server 2003. Potrebbe essere alterata o non disponibile nelle versioni successive di Windows." " – Technophile

+2

@Technophile - Secondo MSDN,' SHCreateDirectory' è deprecato dopo XP SP2 e Server 2003 (http://msdn.microsoft.com/en-us/library/bb762130(v=vs.85).aspx). Non menziona 'SHCreateDirectoryEx' deprecato. – Ferruccio

+1

Sembra attualmente SHCreateDirectory ** Ex ** è anche deprecato: msdn.microsoft.com/en-us/library/bb762131(v=vs.85).aspx – sergiol

1

Scriverei un ciclo. Suddividi il percorso in componenti e "percorrilo", ad esempio iniziando dall'inizio, controlla se esiste. Se lo fa, inseriscilo e continua. In caso contrario, crearlo, inserirlo e continuare. Per i punti bonus, rileva se esiste un componente, ma è un file piuttosto che una directory.

+0

grazie, buona idea. anche se mi aspetterei una funzione nel winapi o nel stl che fa esattamente questo? – clamp

24

Se è possibile utilizzare una libreria esterna, mi guardo boost::filesystem

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

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

È inoltre possibile utilizzare create_directories template bool (const Percorso & p) da Boost::Filesystem biblioteca. Ed è disponibile non solo in Windows.

Problemi correlati