Команда MD ( MKDIR ) — создать каталог
Команда MD ( MKDIR ) используется для создания каталогов в командной строке Windows.
Формат командной строки:
Параметры командной строки:
[диск:]путь — Определяет местоположение создаваемого каталога. Назначение может состоять из буквы диска (с последующим двоеточием), имени папки или их комбинации.
В режиме расширенной обработки команд ( режим по умолчанию) команда MKDIR создает при необходимости все промежуточные каталоги в пути.
Например, если каталог \a не существует, то команда:
mkdir \a\b\c\d или md \a\b\c\d
приводит к тому же результату, что и последовательность команд:
mkdir \a
chdir \a
mkdir b
chdir b
mkdir c
chdir c
mkdir d
При отключении расширенной обработки команд используется только второй вариант из последовательности команд MKDIR и CHDIR.
mkdir /? — отобразить подсказку по использованию команды.
mkdir folder1 — создать каталог folder1 текущем каталоге.
mkdir E:\test\folder1 — то же, что и в предыдущем примере, но с указанием абсолютных путей.
mkdir «C:\USERS\TEST\Мои Документы» — при наличии пробелов в пути или имени каталога, они заключаются в двойные кавычки. Русские имена каталогов должны быть в DOS-кодировке.
MD «%USERPROFILE%\TESTDIR» — создать каталог TESTDIR в каталоге профиля текущего пользователя.
Как создать папку средствами c++
Мне нужно написать программу, которая будет сохранять файлы следующим образом. Проверить, существует ли папка «1» и если нет, то создать папку «1» и затем положить туда картинку test_1 , проверить существует ли папка «N» , если нет, то создать и положить туда картинку test_N .
Отслеживать
219k 15 15 золотых знаков 119 119 серебряных знаков 230 230 бронзовых знаков
задан 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
219k 15 15 золотых знаков 119 119 серебряных знаков 230 230 бронзовых знаков
- c++
- c
- файловая-система
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как создать папку на рабочем столе средствами 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++. В общем удачи
06. Пути и директории
Для работы с файлами и директориями в графическом интерфейсе есть программы, называемые файловыми менеджерами. У разных графических окружений могут быть разные программы, тот же GNOME, который стоит на CentOS, по умолчанию использует файловый менеджер под названием nautilus. Я думаю все знают, что можно делать с файлами и директориями – смотреть информацию о них, копировать, вырезать, удалять, переименовывать, создавать директории и всё такое. И в командой строке это также просто.

Мы знаем, что посмотреть содержимое директории можно с помощью команды ls. По умолчанию она показывает содержимое текущей директории. Заметьте, что ls показывает директории одним цветом, а файлы другим. Чтобы понять, в какой директории мы сейчас находимся, нужна команда pwd – print working directory.
Когда вы открываете терминал, как правило он использует домашнюю директорию пользователя – это личная директория пользователя, где находятся все его файлы. С помощью ls можно смотреть содержимое и других директорий, для этого нужен путь к другой директории.

Кстати о пути. В корне находятся директории, внутри которых тоже есть какие-то директории. Например, в корне у нас есть директория home, где обычно лежат домашние директории пользователей, например, нашего пользователя user. А внутри домашней директории пользователя есть какие-то его личные директории.

То есть, чтобы мне зайти, допустим, в директорию Documents у пользователя user, мне нужно зайти в корень, потом открыть home, user и зайти в директорию Documents. Чтобы переходить по директориям в командной строке, используем команду cd – сhange directory – сменить директорию. И так, пишем cd /, то есть заходим в корень (слеш – это путь к корню), проверяем текущую директорию (pwd), и смотрим её содержимое(ls). Дальше пишем cd home и повторяем всё тоже самое. Не стесняйтесь использовать tab – допустим, пишете cd h, нажимаете tab и он автоматом добавляет ome, так как никаких других директорий, начинающихся на h здесь нет. Точно также для user и Documents.
cd / pwd ls cd home pwd ls cd user pwd ls cd Documents pwd ls

Чтобы сразу зайти в Documents, мы можем разом написать cd /home/user/Documents, разделяя директории знаком слэш.
cd /home/user/Documents/
Когда мы в начале указываем корень (/), а потом пишем первую директорию, которая находится в корне, а потом то что внутри и т.д. - это полный путь. /home/user/Documents – пример полного пути. Он всегда начинается со знака / - то есть мы возвращаемся в самое начало файловой системы и оттуда начинаем писать путь. Такой путь универсальный - где бы вы сейчас не находились, вы можете указать полный путь и попасть туда куда вам надо.

В домашнюю директорию пользователя можно вернуться просто написав cd. Я вижу (ls), что здесь есть директория Documents. Если я хочу зайти в эту директорию, мне не обязательно писать полный путь – cd /home/user/Documents, я могу просто написать cd Documents. Или допустим, давайте зайдём в cd /home/. Я могу написать cd user/Documents. То есть, я строю путь не с корня, а с текущей директории. Такой путь называется относительным. Но что, если я нахожусь в директории /home/user/Documents и хочу попасть на директорию выше, то есть в /home/user ? Для этого в каждой директории есть ссылки на вышестоящую директорию – две точки (..). Если я напишу cd .. , я попаду в /home/user . Я могу делать всякие комбинации, допустим, находясь в директории Documents, я могу написать cd ../Pictures. То есть, я разом вернулся в директорию /home/user и зашёл в Pictures. Чтобы сразу вернуться туда, где я был раньше, я могу написать cd - . Также есть ссылка на текущую директорию – одна точка. Зачем это нужно мы разберём чуть позже. Также есть готовая ссылка на домашнюю директорию нашего пользователя – тильда (~). Где бы мы не находились, мы всегда можем написать cd ~ и попасть в домашнюю директорию, либо использовать это для относительного пути, например cd ~/Documents . Ну и возвращаясь к теме ls, мы можем посмотреть содержимое любой директории, где бы мы сейчас не находились, используя полный или относительный пути. Допустим, ls /home/user/Documents или ls Documents или ls ~/Pictures.
cd pwd ls cd /home pwd cd user/Documents/ cd .. cd Documents cd ../Pictures cd - cd . cd ~ cd ~/Documents ls ~/Pictures

С путями разобрались. Теперь давайте посмотрим, как работать с директориями. Начнём с создания директории, для этого используем команду mkdir – make directory – создать директорию. В качестве аргумента мы должны указать название новой директории – допустим:
mkdir test ls
Можно разом создать несколько директорий:
mkdir test1 test2 test3 ls
Очень не рекомендую использовать пробелы в названиях, так как командная строка воспринимает пробелы как переход на новый аргумент или опцию. Как я показал выше, если я напишу:
mkdir this is a new directory ls
у меня создастся пять директорий. Но если всё же вам необходимо создать директорию с пробелами в названии, вы можете взять название новой директории в кавычки:
mkdir "New Dir"
Теперь, чтобы зайти в эту директорию, нужно либо использовать кавычки, либо использовать специальный символ - \ (обратный слэш) перед пробелом.
cd "New Dir" cd .. cd New\ Dir
Это называется экранированием символов. В данном случае это позволит консоли игнорировать пробел как переход на новый аргумент.

Если я хочу создать сразу директорию 1, а внутри неё директорию 2, а внутри неё директорию 3, для этого нужна опция -p – parents – создавать родительские директории. То есть, написав:
mkdir -p dir1/dir2/dir3
я создам несколько вложенных директорий.

Для удаления пустой директории используется команда rmdir – remove directory – удалить директорию. Например:
rmdir test1
Можно разом удалять несколько директорий:
rmdir test2 test3
Если директория не пустая, то rmdir откажется её удалять. Поэтому, когда вам нужно удалить директорию со всем содержимым, используется команда rm -r . Например:
rm -r New\ Dir
Тогда я удалю как New Dir, так и директории dir1, dir2 и dir3. Вообще, rm используется для удаления файлов, но о файлах мы поговорим в следующий раз. А опцию -r вы часто будете встречать – она означает рекурсивно, то есть со всем, что находится внутри. Допустим, та же команда ls уже с большим -R покажет содержимое директории вместе с содержимым поддиректорий.
ls -R /home/user
Осталось ещё рассмотреть копирование, перемещение и прочее, но так эти команды совпадают с командами по работе с файлами, а тема уже получилась достаточно большая, оставшееся мы рассмотрим в следующий раз. Чтобы не забывать пройденное, обязательно практикуйтесь. Например, найдите в ролике все команды с опциями, которые я вводил, выпишите, повторите на различных директориях. Добейтесь того, чтобы вы знали без всяких раздумий, для чего нужна каждая из этих команд и ключей.
© Copyright 2021, GNU Linux Pro, CC-BY-SA-4.0. Ревизия 5f665cc2 .