使用带有C ++程序参数的系统命令

时间:2017-11-30 13:59:23

标签: c++

所以我正在为学校做一个项目,并且正在尝试使用windows函数" mkdir",但目录名是程序给出的字符串。这是(不是很有用)代码:

string c,a;
cin>>c;
if(c.compare("mkdir")==0)
    cin>>a;
    system("mkdir"); //here I want to make the directory
}

4 个答案:

答案 0 :(得分:3)

正如其他人所提到的,最好不使用system调用来创建目录。如果您想使用该方法,则需要先build a command string which includes your arguments将其传递给system

char command[100];
sprintf(command, "mkdir %s", a);
system(command);

答案 1 :(得分:3)

C ++ 11(或C ++ 14)标准不存在目录。后来的C ++标准(例如C ++ 17 ...)可能会提供std::filesystem库。

您可以使用特定于操作系统的原语。在Linux和POSIX上,考虑mkdir(2)系统调用(以及Windows上的CreateDirectory函数)。

你可以找到框架库(例如POCOQtBoost,....)包装这些,所以使用这些库你不会关心操作系统特定的功能。

  

但目录名是程序给出的字符串。

然后您可以考虑将命令构建为system(3)的运行时C字符串。例如。使用snprintf(3)(或使用某些std::string操作)。小心code injection(例如,想一想在Linux上提供/tmp/foo; rm -rf $HOME作为目录名的恶意用户)!

答案 2 :(得分:1)

如果您想要创建文件夹,请使用WinApi,请参阅CreateFolder

答案 3 :(得分:0)

我能想到的最简单的解决方案:

string c;
cin >> c;
if(c == "mkdir") {
    string a;
    cin >> a;
    system("mkdir " + a);
}

但是如果这个项目涉及编写某种命令shell,system很可能是禁止的,并且您希望直接使用操作系统的API。