اجرای دستورات Dos و CMD در c++ به صورت کد نویسی - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

اجرای دستورات Dos و CMD در c++ به صورت کد نویسی

+4 امتیاز
میخواستم بدونم چطوری میشه دستوراتی که در cmd و dos اجرا میکردیم رو در c++ هم اجرا کنیم
سوال شده اسفند 24, 1392  بوسیله ی reza.avoor (امتیاز 82)   8 12 20
دوباره تگ گذاری شد اسفند 24, 1392 بوسیله ی BlueBlade

2 پاسخ

+5 امتیاز
 
بهترین پاسخ

باید از دستور system() استفاده کنین

مثلا  کد زیر پوشه folder داخل درایو D رو در صورت خالی بودن پاک می کنه .

#include<iostream>

int  main()
{
    std::string command;
    command +="rmdir ";
    command += "\"D:\\folder\"";
    system(command.c_str());
}

در صورتی که دستور cmd مورد نظرتون یک سری اطلاعات بر می گردونه و اون اطلاعات رو می خواهین اول باید اطلاعاتی که بر می گردن رو داخل فایل ذخیره کنین بعد از فایل بخونین (برای نوشتن داخل فایل باید از < استفاده کنین )

مثلا فرض کن می خواهی دستور ping رو اجرا کنی می تونی از این تابع که من قبلا نوشتم استفاده کنی :

#include <iostream>
#include <fstream>
#include <sstream>

std::string cmdCommand(const std::string& command)
{
    {
        std::ofstream file("temp.txt");
        if(file.is_open())
            file.close();
        else
            throw "can not make file ";

        std::string cmd =command + " > temp.txt";
        if(system(cmd.c_str()))
            throw "wrong system command";
    }
    //read result
    std::ifstream file("temp.txt");
    if(!file.is_open())
        throw "can not open file ";

    std::stringstream buffer;
    buffer << file.rdbuf();

    file.close();

    remove("temp.txt");

    return buffer.str();
}

int  main()
{
    std::string result;

    try
    {
        result = cmdCommand("ping google.com");
    }
    catch(const char* exc)
    {
        std::cout<<exc;
    }
    std::cout<<result;
    std::cin.get();
}

در ضمن استفاده از system باعث میشه که برنامتون دیگه cross platform نباشه پس بهتره دنبال راه های دیگه ای برای انجام کارتون باشید .

پاسخ داده شده اسفند 24, 1392 بوسیله ی BlueBlade (امتیاز 15,315)   15 18 89
انتخاب شد اردیبهشت 3, 1393 بوسیله ی مصطفی ساتکی
برای برگرداندن دستود استفاده از < کاملا اشتباهه چون فقط خط اول را برمیگرداند

 

< چیزی رو بر نمی گردونه کارش اینه که اطلاعات رو داخل فایل میریزه .
بعد این که < فرقش با << اینه که دومی در صورت بودن فایل اطلاعات رو به آخر فایل اضافه می کنه .
< تمام اطلاعات رو ذخیره می کنه کد بالا رو تست کن ببین
مثل اینکه شد
من فرقشون رو میدونم قبلا کار کردم
من میخواستم خروجی پایتون رو در txt ذخیره کنم یه batch اینجوری نوشتم فقط خط اول رو بر میگردوند
"python a.py > "d:\a.txt
+2 امتیاز
با استفاده از api

GetCommandLine

که درون Kernel32.dll هست هم میشه این کاررو انجام داد
پاسخ داده شده اردیبهشت 1, 1393 بوسیله ی Fire360Boy (امتیاز 2,524)   6 24 43
...