2016-03-11 4 views
0

Я хочу создать папку с именем sessionname. Если папка с этим именем уже существует, это нормально, и я не хочу ничего делать.Создайте папку, если она не существует, ничего не делать, если она

Прямо сейчас я делаю это:

finalpath = "/home/Documents"  
finalpath.append(path + "/" + sessionname); 
    if (mkdir(finalpath.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) == -1) 
    { 
     //INVALID PATH 
     std::cout << "path is invalid, cannot create sessionnamefolder" << std::endl; 
     throw std::exception(); 
    } 

ошибок Этот код, если папка /home/Documents/sessionname существует, так как папка не может быть создана.

Как я могу проверить, не сработало ли mkdir, потому что строка была недействительной или потому что строка была vaild, но папка уже существует?

+2

Читайте http://pubs.opengroup.org/onlinepubs/009695399/functions/mkdir.html –

+3

http://stackoverflow.com/questions/7430248/creating-a-new-directory-in-c –

+3

У вас есть прочитайте [справочную страницу 'mkdir'] (http://man7.org/linux/man-pages/man2/mkdir.2.html)? Вы проверили, какие ошибки вы можете получить от него? –

ответ

4

Как проверить, не работает ли mkdir, потому что строка была недействительной или потому что строка была vaild, но папка уже существовала?

Код возврата от mkdir() показывает, успешно ли выполнена функция. В случае отказа вы должны проверить специальную переменную errno, подробности можно найти на man page

if (mkdir(finalpath.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) == -1) 
{ 
    if(errno == EEXIST) { 
     // alredy exists 
    } else { 
     // something else 
     std::cout << "cannot create sessionnamefolder error:" << strerror(errno) << std::endl; 
     throw std::runtime_exception(strerror(errno)); 
    } 
} 

Примечание: это общий метод для Linux/Unix (и других системах POSIX) библиотеки функций, чтобы сообщить информацию о состоянии ошибки.

1

Как прокомментировал это упомянуто на mkdir - сделать каталог - вручную страницы, одна из ошибок mkdir вы можете получить, если [EEXIST] - существует> Указанный файл. Так оно терпит неудачу. См. here на главной странице mkdir. И здесь возможно duplicate на stackoverflow.

+0

Вероятно, OP не знает, откуда взять этот код ошибки. – Slava

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