Как создать папку на рабочем столе средствами c++?

В c++ 17 версии имеется библиотека filesystem, позволяющаяя производить некоторые манипуляции с файловой системой компьютера. Что касательно вашего вопроса там есть такая функция как bool create_directory(. ). Данная функция принимает в качестве аргумента путь конец которого — имя папки для создания.
В Windows рабочий стол находится по пути:
/users//desktop/
В Unix-like (BSD, Linux и т.д.) по пути:
/home//desktop/
И того нам нужно получить имя юзера:
В Windows это как-то так:
#include #include char username[UNLEN+1]; //
Итого, код для Windows будет выглядеть как-то так:
#include #include #include #include namespace fs = std::filesystem; // Для краткости bool createDesktopDir(std::string dir_name) < char username[UNLEN+1]; DWORD username_len = UNLEN+1; GetUserName(username, &username_len); return fs::create_directory(std::string("/users/") + username + "/desktop/" + dir_name) >
Для Unix-like ОС получения юзера выглядит так:
#include char username[1024] = ; getlogin_r(username, sizeof(username)-1);
А следовательно код для создания директории будет такой:
#include #include #include namespace fs = std::filesystem; bool createDesktopDir(std::string dir_name) < char username[1024] = ; getlogin_r(username, sizeof(username)-1); return fs::create_directory(std::string("/home/") + username + "/desktop/" + dir_name) >
Для использования filesystem могут потребоваться дополнительные параметры компилятора / компоновщика. Реализация GNU до 9.1 (то есть GCC) требует связывания с -lstdc++fs, а реализация LLVM до LLVM 9.0 (то есть clang) требует связывания с -lc++fs.
С Unix могут быть проблемы если вы запустили программу от root поскольку его домашняя директория находится по адресу /root/, а следовательно и рабочий стол тут /root/desktop/. Так же могут быть проблемы когда директории в Linux имеют русские имена например /home//Рабочий\ стол, надо как-то обработать этот момент, благо GCC и clang хотябы умеют в Unicode. В Windows же могут быть проблемы с компиляторами MinGW если имя пользователя на русском (или другом языкие содержащим Unicode-символы) ибо использовать в путях на текущий момент они могут только в ASCII-символы, то есть только латиница. Тут либо кушать кактус и кидать из кодировки в кодировку, либо юзать visual c++. В общем удачи
Как создать папку средствами c++
Мне нужно написать программу, которая будет сохранять файлы следующим образом. Проверить, существует ли папка "1" и если нет, то создать папку "1" и затем положить туда картинку test_1 , проверить существует ли папка "N" , если нет, то создать и положить туда картинку test_N .
Отслеживать
218k 15 15 золотых знаков 117 117 серебряных знаков 229 229 бронзовых знаков
задан 17 янв 2019 в 11:15
Rd Colossus Rd Colossus
173 1 1 серебряный знак 9 9 бронзовых знаков
Тебе нужен boost::filesystem.
17 янв 2019 в 11:24
Вам нужно совсем-совсем средствами C++ (стандарт и не более) или функции POSIX тоже устроят?
17 янв 2019 в 11:25
@Harry имхо boost::filesystem предпочтительней POSIX. Еще вчера это почти было в стандарте =)
17 янв 2019 в 11:26
@mrFieldy Тогда уж предпочтительнее стандартный filesystem - зачем boost дергать - это все-таки внешняя библиотека.
17 янв 2019 в 11:33
@mrFieldy Т.е. тут, когда пишут "he filesystem library was originally developed as boost.filesystem, was published as the technical specification ISO/IEC TS 18822:2015, and finally merged to ISO C++ as of C++17." - беззастенчиво врут.
17 янв 2019 в 11:42
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Начнем с простого пути 🙂
stat из для проверки существования файла/каталога.
mkdir для создания каталога.
Откровенно говоря, буду удивлен, если какой-то компилятор их не имеет.
Но если даже это рассматривается как измена чистому C++ - то в C++17 реализована масса функциональности для работы с файлами. Проверка существования - с помощью exists , создание каталога - create_directory .
Отслеживать
ответ дан 17 янв 2019 в 11:28
218k 15 15 золотых знаков 117 117 серебряных знаков 229 229 бронзовых знаков
- c++
- c
- файловая-система
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как создать папку при помощи mkdir
mkdir - команда в командной строке, используемая для создания новых папок (директорий) в файловой системе операционной системы. Команда обычно доступна в различных операционных системах, включая Linux, macOS и Windows.
mkdir принимает один или несколько аргументов в виде имен папок, которые нужно создать. Создание новых папок может осуществляться как в текущем рабочем каталоге, так и в указанном пути. При создании папок нужно обеспечить права доступа и разрешения, в зависимости от настроек операционной системы и текущей сессии пользователя. Данная команда также поддерживает различные опции и флаги, которые могут управлять процессом создания папок, включая вложенные папки, рекурсивное создание папок и многое другое.
Для чего нужна команда mkdir
Команда mkdir используется для создания новой папки (или нескольких папок) в файловой системе. Она может принимать один или несколько аргументов в виде путей к новым папкам, которые нужно создать. Например, `mkdir Documents` создаст новую папку с именем "Documents" в текущем рабочем каталоге.

Также mkdir может использоваться с опциями для управления процессом создания папок. Например, опция `-p`, как в команде `mkdir -p Documents/Folder1/Folder2`, позволяет создать вложенные папки, включая все промежуточные директории, если они не существуют.
Инструкция как создать папку используя mkdir
Для создания папки при помощи команды mkdir на различных операционных системах используются следующие команды:
1. Windows:
mkdir
Например:
mkdir C:\Users\Имя_Пользователя\Новая_Папка
2. Linux и macOS:
mkdir
Например:
mkdir /home/Имя_Пользователя/Новая_Папка
В обоих случаях команда mkdir создаст папку с указанным путем, если такой папки еще не существует.
Создание папки
Создание папки в Linux
Привет форумчане!! Подскажите апишку с директивой что бы в линухе можно было создать папку в.
Создание папки с заданным именем
Открыт word документ с номером, к примеру 90.doc, необходимо создать в каталоге папку.
Создание вложенной папки (Directory)
Добрый день, появилась необходимость создать вложенную папку в среде windows XP нашел тока .
Считывание строк из текстового файла и создание папки
ВОзникла задача создать кучу папок с разными именами, возникла идея, что можно запихать эти.
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
Ну а разве есть такая функция mkdir в C++? Конечно нет. Это функция DOS. В С++ по-другому папка создается.
Добавлено через 3 минуты
А, понятно. Создание каталога: CreateDir() или CreateDirectory(), в зависимости от среды видимо.
Регистрация: 22.12.2016
Сообщений: 105
DemolitionMan, есть такая функция, нужно подключить директорию direct.h, у меня все создалось я просто путь неправильно указал.
Любитель чаепитий
3741 / 1798 / 565
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1

Сообщение было отмечено Akello2 как решение
Решение
Сообщение от Akello2 
нужно подключить директорию direct.h
В с++ нет никакого direct.h
Регистрация: 22.12.2016
Сообщений: 105
GbaLog-, я работаю с Code::Blocks 16.01 , использую #include и все работает.
Любитель чаепитий
3741 / 1798 / 565
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
Сообщение от Akello2 
все работает.
Я не говорил, что работать не должно, я сказал, что в с++ никаких direct.h не существует. Это сторонняя приблуда.
Форумчанин
![]()
![]()
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
Сообщение от Akello2 
Это заголовочный файл не входит в стандартную библиотеку, одна имеется на Linux и также существует его порт на Windows, но его ставят отдельно. Наверное, его включили в mingw CodeBlocks.
Любитель чаепитий
3741 / 1798 / 565
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
Сообщение от MrGluck 
Наверное, его включили в mingw CodeBlocks.
Ну, C::B есть и под линукс, так что, возможно, ТС юзает gcc.
Форумчанин
![]()
![]()
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
Сообщение от GbaLog- 
Ну, C::B есть и под линукс, так что, возможно, ТС юзает gcc.
Я рискнул предположить что это не так по строчке
Сообщение от Akello2 
setlocale(LC_CTYPE, "rus");
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
#include #include void test1() { const char dir_path[] = "c:\\temp\\cplusplus"; boost::filesystem::path dir(dir_path); if(boost::filesystem::create_directory(dir)) { std::cout "Success" "\n"; } } void test2() { const char dir_path[] = "c:\\temp\\cplusplus\\example\\test"; boost::filesystem::path dir(dir_path); if(boost::filesystem::create_directories(dir)) { std::cout "Success" "\n"; } } int main() { test1(); test2(); return 0; }
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Создание файлов и папок: почему заданный код не создаёт папки?
Есть код: #include <fstream> using namespace std; int main() < ofstream.
Создание папки с именем, которое находится в переменной типа string
Нужно программно создать папку с именем, которое находится в переменной типа string Пытаюсь.
Получить название файлов с 1-ой папки , со 2-ой папки и вывести. Неправильный вывод
Есть такая задача: получить название файлов с 1-ой папки , со 2-ой папки и вывести название тех.
Создание папки
Выдает ошибку что не согласен с каким то ПОЗИКС как ее исправить ? Ошибка 1 error C4996.