2009-09-03 3 views
9

, что является удобным способом для создания каталога, когда путь, как это дается: «\ сервер \ Foo \ бар \»C++, как создать каталог с пути

к сведению, что промежуточные каталоги не могут существовать ,

CreateDirectory и mkdir только, кажется, создают последнюю часть каталога и дают ошибку в противном случае.

платформа - это Windows, MSVC-компилятор.

спасибо!

ответ

7

SHCreateDirectoryEx() может это сделать. Он доступен на XP SP2 и более поздних версиях Windows.

+2

Устаревший: «[Эта функция доступна через Windows XP с пакетом обновления 2 (SP2) и Windows Server 2003. В последующих версиях Windows она может быть изменена или недоступна.]» – Technophile

+2

@Technophile - согласно MSDN, 'SHCreateDirectory' устарел после XP SP2 и Server 2003 (http://msdn.microsoft.com/en-us/library/bb762130(v=vs.85).aspx). Он не упоминает, что 'SHCreateDirectoryEx' устарел. – Ferruccio

+1

В настоящее время SHCreateDirectory ** Ex ** также устарел: msdn.microsoft.com/en-us/library/bb762131(v=vs.85).aspx – sergiol

1

Я бы написал цикл. Разделите путь на компоненты и «пройдите», т. Е. Начиная с начала, проверьте, существует ли он. Если это так, введите его и продолжите. Если это не так, создайте его, введите его и продолжите. Для бонусных очков определите, существует ли какой-либо компонент, но это файл, а не каталог.

+0

спасибо, хорошая идея. хотя я бы ожидал функции в winapi или stl, которые делают именно это? – clamp

24

Если вы можете использовать внешнюю библиотеку, я смотрел на boost::filesystem

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

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

Вы также можете использовать шаблон BOOL create_directories (Const Путь & р) из Boost::Filesystem библиотеки. И он доступен не только в Windows.

Смежные вопросы