簡體   English   中英

在C ++中將系統命令與參數一起使用

[英]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函數)。

您可以找到包裝這些的框架庫(例如POCOQtBoost ,....),因此使用這些庫就不必關心操作系統特定的功能。

但是目錄名稱將是程序指定的字符串。

然后,您可以考慮將命令構建為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM