Как значение переменной вставить в путь(MkDir)?

Решил избавится от надоедливой рутины, и как известно лень — двигатель прогресса.Так как я новичок в программирование на си++, а тем более под Linux, то для работы выбрал стандартный блокнот и g++. И тут встала проблема — блокнот создает временные файлы(в графически их не видно, но в терминале их накапливается слишком много, что путает).Так же в программу решил добавить возможность создания новых проектов(папку+вложенный в него файл).Нашел как это сделать, а на практике реализовать не могу.Может закаленные программисты подскажут новичку как значение переменной вставить в путь.
Ниже представлен кусок кода из инструкции:
#include <sys/types.h>
#include <sys/stat.h>
int status;
...
status = mkdir("/home/cnd/mod1");

А это мой код:
cout<<"Enter name project=";
cin>>name;
path= MkDir("/home/Work/cpp/???");
  • Вопрос задан
  • 3870 просмотров
Решения вопроса 1
skor
@skor
На C++ чуть короче:

#include <string>
#include <iostream>
#include <stdlib.h>

#include <sys/stat.h>
#include <sys/types.h>

int main()
{
  std::string const path = "/home/Work/cpp/";
  std::string name;

  std::cout << "Input project name: ";
  std::cin >> name;

  if (name.empty())
    {
      std::cerr << "Empty file name" << std::endl;
      return EXIT_FAILURE;
    }

  std::string const dir = path + name;

  if (mkdir(dir.c_str(), 0755) == -1)
    {
      perror("Cannot create directory");
      return EXIT_FAILURE;
    }

  std::cerr << dir << " created" << std::endl;

  return EXIT_SUCCESS;
}

Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
AxisPod
@AxisPod
Лень почитать книги? Или уже в вузах надо сдавать лабораторные работы, а учиться лениво?
Ответ написан
skor
@skor
Удивился, что нет ни одного правильного ответа. Не поленился и написал на чистом Си.

#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#include <linux/limits.h>

#define QUOTE_H(W) #W
#define QUOTE(W) QUOTE_H(W)

int main()
{
  char name[NAME_MAX+1] = "";
  char path[PATH_MAX] = "/home/Work/cpp/";

  printf("Input project name: ");
  if (scanf("%s"QUOTE(NAME_MAX), name) == -1)
    {
      fprintf(stderr, "Empty file name");
      return EXIT_FAILURE;
    }

  size_t const max_name_len = PATH_MAX - 1 - strlen(path);
  if (strlen(name) > max_name_len)
    {
      fprintf(stderr, "File name too long");
      return EXIT_FAILURE;
    }

  strncat(path, name, max_name_len);

  if (mkdir(path, 0755) == -1)
    perror("Cannot create directory");
  else
    printf("'%s' created\n", path);

  return EXIT_SUCCESS;
}

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы