_mkdir дает ложные ошибки Windows

Привет, я пытаюсь сделать каталог в Windows с этим кодом

заголовок

#include <direct.h>

скрипт

int main() {
string local = "C:/Program Files (x86)/Mail";

try
{
_mkdir (local.c_str ());
cout << "It is made?";
}

catch(invalid_argument& e)
{
cout << e.what () << " " << (char*) EEXIST;
if (e.what () == (char*) EEXIST) {
cout << e.what () << " " << (char*) EEXIST;
}
return;
}
}

Файл явно не сделан, но он тоже не делает ошибка должна.

-3

Решение

_mkdir не будет бросать исключение. (Это не Python или Boost, или какое-либо умное промежуточное ПО)

Прочитайте документацию, на которую вы ссылались: она возвращает значение. 0 в порядке, -1: ошибка, спросите, почему errno

Не игнорируйте возвращаемое значение. Возможно, у вас недостаточно прав без повышения UAC для создания каталога.

0

Другие решения

Итак, я наконец-то понял, что для errno вам нужен заголовок (по крайней мере на окнах) < errno.h>. Полный список ошибочные коды.

Если вы хотите увидеть, что код errno что-то происходит, скажем

if (
_mkdir(((string)"C:/Program Files (x86)/Mail").c_str()) == 0 ||
errno == 17 /* this is the code for - File exists - */
){
// Do stuff

} else {
int errorCode = errno; // You need to save the code before anything else,
//    becuase something else might change its value
cout << errorCode;
}

Это работает в Windows, я не уверен, есть ли библиотека для использования, которая является переносимой для обоих (если кто-нибудь знает, пожалуйста, поделитесь).

Не важно / напыщенная речь —

Одна вещь, которую я заметил в документации по Linux / объяснениях пользователей, это то, что все сделано сложным. Я имею в виду, да, мы все впечатлены твоим знанием слов, о которых никто, кроме специалистов по информатике, не знает, но, несомненно, есть более простые способы объяснения вещей, как это делает freecodecamp или академия Кан.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector