所以我正在为学校做一个项目,并且正在尝试使用windows函数" mkdir",但目录名是程序给出的字符串。这是(不是很有用)代码:
string c,a;
cin>>c;
if(c.compare("mkdir")==0)
cin>>a;
system("mkdir"); //here I want to make the directory
}
答案 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函数)。
你可以找到框架库(例如POCO,Qt,Boost,....)包装这些,所以使用这些库你不会关心操作系统特定的功能。
但目录名是程序给出的字符串。
然后您可以考虑将命令构建为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。