[英]A command is working in CMD but not working in c++ program using system() function
[英]Using a system command with parameter from program in C++
因此,我正在為一個學校做一個項目,並試圖使用Windows函數“ mkdir”,但是目錄名稱將是程序指定的字符串。 這是(不是很有用)的代碼:
string c,a;
cin>>c;
if(c.compare("mkdir")==0)
cin>>a;
system("mkdir"); //here I want to make the directory
}
正如其他人提到的那樣,最好在不使用system
調用的情況下創建目錄。 如果無論如何都要使用該方法,則需要先構建一個包含參數的命令字符串,然后再將其傳遞給system
。
char command[100];
sprintf(command, "mkdir %s", a);
system(command);
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
操作)。 當心代碼注入 (例如,將惡意用戶提供/tmp/foo; rm -rf $HOME
作為Linux上的目錄名)!
如果要使用WinApi創建文件夾,請參見CreateFolder
我能想到的最簡單的解決方案:
string c;
cin >> c;
if(c == "mkdir") {
string a;
cin >> a;
system("mkdir " + a);
}
但是,如果該項目涉及編寫某種命令外殼,那么system
很可能會超出限制,您應該直接使用操作系統的API。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.